CakePHP控制器别名

Jel*_*mer 5 php cakephp cakephp-2.2

我知道有关于这个主题的其他几个主题,但它们似乎不符合我的需要.

是)我有的

  • example.com/log/
  • LogsController.php

我有LogsController而不是LogController(复数),因为CakePHP希望你有多个控制器.

但正如你可能知道/注意的那样,example.com/log/永远不要使用,LogsController因为网址中缺少's'.

现在,我希望/log/*被重定向到/logs/*.使用以下代码完美地工作:

Router::connect ('/log/*', array('controller'=>'logs'));
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试访问example.com/log/actions/foo/bar它似乎不起作用.所以在一些Googeling之后我发现了这个:

Router::connect ('/log/:action/*', array('controller'=>'logs'));
Run Code Online (Sandbox Code Playgroud)

效果很好.但现在,当我试图再次访问example.com/log/时,它说

错误:找不到LogController.

问题 所以我的问题是,如何为我的网址设置别名,以便/log/使用LogsController而不是尝试使用LogController.

我还有一些控制器,我想改变它,比如flight => FlightsController,profile => ProfilesController.


看看这个问题.它是关于同一主题,但略有不同.它可能会以某种方式帮助你.

Jel*_*mer 10

好的,在IRC的其他人的帮助下,以及类似的东西.我发现了以下内容.

结合的

Router::connect('/flight/:action/*', array('controller'=>'flights'));
Router::connect('/flight/*', array('controller'=>'flights'));
Run Code Online (Sandbox Code Playgroud)

诀窍.我以前试过这个,但是按照其他顺序,如下:

Router::connect('/flight/*', array('controller'=>'flights'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));
Run Code Online (Sandbox Code Playgroud)

这不起作用.

所以这篇文章的前两行代码为我解决了这个问题.另一个人告诉我,Arun Jain的解决方案不是一个合适的解决方案,因为它也改变了核心中的名称.这将导致FormsHelper和类似的问题.所以我想我会更喜欢这篇文章中的代码,因为这只是一个别名而不是核心更改脚本.无论如何,谢谢你的帮助.