Controller Com Hífen Na Url

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 ?

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.

Obrigado Wanderson!

Funcionou legal.