我知道有关于这个主题的其他几个主题,但它们似乎不符合我的需要。
我有什么
我有LogsController
而不是LogController
(复数),因为CakePHP希望你有多个控制器。
但正如您可能知道/注意的那样,example.com/log/
永远不会使用LogsController
,因为网址中缺少's'。
现在,我想将/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
。
看看this question。它是关于同一主题,但略有不同。它可能会以某种方式帮助你。
答案 0 :(得分:10)
好的,在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'));
哪个不起作用。
所以这篇文章的前两行代码为我解决了这个问题。另一个人告诉我,Arun Jain的解决方案不是一个合适的解决方案,因为它也改变了核心中的名称。这将导致FormsHelper和类似的问题。所以我想我会更喜欢这篇文章中的代码,因为这只是一个别名而不是核心更改脚本。无论如何,谢谢你的帮助。
答案 1 :(得分:1)
要做到这一点,路由正确的方法如下。
Router::connect('/flight', array('controller'=>'flights','action'=>'index'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));
这告诉路由器,当在URL中找到一个动作来使用它时,但是没有找到params然后默认是使用索引动作。
答案 2 :(得分:0)
我对这一切略有不同。复数通常是更准确的方式,但是在复数只是明显错误的情况下,我在Inflector类(/ lib / Cake / Utility / Inflector)中添加了一个异常。
在您的示例中,我会将log
添加到此uninflected
字词列表中。这意味着系统范围的蛋糕不会附加's'。您的LogController
视图将位于Log
视图文件夹等...
修改强>
我在app/config/bootstrap.php
Inflector::rules(
'plural',
array(
'uninflected' => array('log')
)
);
这会将log
添加到未反射的列表中,而无需更改Core中的文件以允许更轻松的版本更新。
答案 3 :(得分:-1)
您只需使用以下命令即可:
class LogsController extends AppController
{
public $name = 'Log';
..... YOUR REMAINING CODE ......
}
您的路由器连接代码将保持不变。请问它是否对你不起作用。