efrj
(Efrj)
1
Tenho um controller chamado Arquivo_Morto.
Ao digitar a chamada para este controller na barra de endereço do browser, devo digitar assim: http://nome-do-sistema/arquivo_morto
No entanto, gostaria que ficasse assim: http://nome-do-sistema/arquivo-morto
Se fosse com o Zend funcionaria porque ele faz a troca do underline pelo hífen automaticamente. Mas infelizmente o Yii não faz essa mudança.
Qual é o procedimento para que o Yii reconheça o nome do controller com hífen na url ?
wanderson
(Wanderson Wbc)
2
Primeiro vamos ter que reescrever a classe CUrlManager. Então crie o seguinte arquivo UrlManager.php na pasta components.
Adicione o seguinte código no arquivo UrlManager.php:
<?php
class UrlManager extends CUrlManager
{
public $showScriptName = false;
public $appendParams = false;
public $useStrictParsing = true;
public $urlSuffix = '/';
public function createUrl($route, $params = array(), $ampersand = '&')
{
$route = preg_replace_callback('/(?<![A-Z])[A-Z]/', function($matches) {
return '-' . lcfirst($matches[0]);
}, $route);
return parent::createUrl($route, $params, $ampersand);
}
public function parseUrl($request)
{
$route = parent::parseUrl($request);
return lcfirst(str_replace(' ', '', ucwords(str_replace('-', ' ', $route))));
}
}
Agora no arquivo de configuração do sistema "config/main.php" altere conforme abaixo:
<?php
return array(
// ....
'components' => array(
'urlManager' => array(
'class' => 'UrlManager',
'rules' => array(
// ...
'<controller:[\w\-]+>' => '<controller>',
'<controller:[\w\-]+>/<action:[\w\-]+>' => '<controller>/<action>',
// ...
),
),
),
);
Finalizando escreve suas classes no formato CamelCase, ou seja, ao invés de usar Arquivo_MortoController escreve somente ArquivoMortoController.