Yii Framework Forum: Controller Com Hífen Na Url - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Controller Com Hífen Na Url Rate Topic: ***** 1 Votes

#1 User is offline   Edivaldo Reis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 22-March 12

Posted 27 January 2014 - 08:46 AM

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 ?
0

#2 User is offline   Wanderson 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 69
  • Joined: 20-February 09
  • Location:Rio de Janeiro, Brazil

Posted 27 January 2014 - 12:41 PM

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.
0

#3 User is offline   Edivaldo Reis 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 28
  • Joined: 22-March 12

Posted 27 January 2014 - 01:22 PM

Obrigado Wanderson!

Funcionou legal.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users