我知道有几个关于这个主题的其他议题,但他们不似乎符合我的需要。
是)我有的
- example.com/log/
- LogsController.php
我有LogsController
代替LogController
(复数),因为CakePHP的要你有多个控制器。
但是,正如你可能知道/通知, example.com/log/
将永远不会使用LogsController
因为在URL中丢失的“。
现在,我想有/log/*
被重定向到/logs/*
。 工作完全正常用下面的代码:
Router::connect ('/log/*', array('controller'=>'logs'));
但是,当我尝试访问example.com/log/actions/foo/bar
它似乎并没有工作。 因此,一些Googeling后,我发现这一点:
Router::connect ('/log/:action/*', array('controller'=>'logs'));
伟大的作品。 但现在当我试图再次访问example.com/log/,它说
错误:LogController找不到。
问我的问题是,我该如何设置了一个别名我的网址,以便/log/
将使用LogsController
,而不是试图用LogController
。
我有几个地方控制器我想改变这一点,就像flight => FlightsController
, profile => ProfilesController
。
看看这个问题 。 它是关于同一主题,但略有不同。 它可以帮助你以某种方式。
好了,与其他一些人在IRC和类似的东西的帮助。 我发现了以下内容。
的组合
Router::connect('/flight/:action/*', array('controller'=>'flights'));
Router::connect('/flight/*', array('controller'=>'flights'));
是卓有成效的。 我尝试过这一点,但在其他命令,就像这样:
Router::connect('/flight/*', array('controller'=>'flights'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));
这是行不通的。
因此,在这个职位的第一个两行代码解决了这个问题对我来说。 另一个家伙告诉我,阿伦耆那教的解决方案是不是一个合适的解决方案,因为它改变了nameconventions核心为好。 这将导致与FormsHelper问题和类这样的。 所以,我想我会喜欢的代码在这个岗位,因为这只是一个别名,而不是脚本的核心改变块。 感谢反正帮助。
与路由正确的方法是如下这样做。
Router::connect('/flight', array('controller'=>'flights','action'=>'index'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));
这是说,当一个动作在使用它的网址找到了路由器,但它没有PARAMS被发现然后默认使用索引操作。
我对所有这一切都略有不同的看法。 复数更为经常去的东西,但在occassions当复数是完全错误的更准确的方法,我添加例外到变形器类(/ lib目录/蛋糕/实用/偏转板)。
在您的例子我想补充log
到的这个列表uninflected
话。 这意味着,全系统的蛋糕不会追加了“S”。 你将有你的LogController
你的看法会坐在Log
查看文件夹等...
编辑
我已经遇到了一个非常巧妙的方式从内部做到这一点app/config/bootstrap.php
Inflector::rules(
'plural',
array(
'uninflected' => array('log')
)
);
这将增加log
的不变调的列表,而无需改变核心中的文件,以允许更容易的版本更新。
你可以简单地做它用以下:
class LogsController extends AppController
{
public $name = 'Log';
..... YOUR REMAINING CODE ......
}
您的路由器connnect代码将保持不变。 恳请如果它不适合你的工作。