我在网上搜索了很多但是我找不到任何特定的解决方案 在CakePHP 1.3中,与1.2不同,如果插件中有控制器,并且两者具有相同的名称,则可以通过“< plugin> /< action>”进行访问,它将调用“默认”控制器。但是在1.3中,根据这个:
http://cakeqs.org/eng/questions/view/setting_up_magic_routes_for_plugins_in_cakephp_1_3
它已被删除,只有默认插件控制器中的'index'操作才能以这种方式访问。
我考虑在我的routes.php文件中添加额外的代码,并遍历我的应用程序中的所有插件,为插件中命名的控制器中的每个操作制作此类路由,但它似乎不是正确的要做的事情......
在1.3中使这项工作的任何其他建议?或至少一些非常具体的代码文档,这个特定的变化?我已经阅读了1.3.0-RC4公告中的内容,但还不够清楚......
感谢
答案 0 :(得分:0)
假设一个名为“test”的插件,您可以在app / plugins / test / controller / test_controller.php中执行类似的操作:
<?php
class TestController
extends AppController
{
public function index()
{
// Is there any additional args passed to us?
if(count($this->passedArgs) > 0)
{
// Is this a request for one of our actions?
$actualAction = $this->passedArgs[0];
if(is_callable(array($this, $actualAction)))
{
// Yup. Do it.
return call_user_func_array(array($this, $actualAction), array_slice($this->passedArgs, 1));
}
}
// Default functionality here.
die("Index of plugin requested.");
}
public function another($param1, $param2)
{
die("{$param1}, {$param2}");
}
}
您还必须将以下内容添加到app / config / routes.php:
Router::connect("/test/*", array("plugin" => "test", "controller" => "test"));
完成此操作后,对/ test / another / one / 2的请求将在浏览器中正确呈现“one,two”,并且对/ test的请求将显示“请求的插件索引”。
我认为这不是一个糟糕的方式,插件消费者方面的大惊小怪,插件代码中只有一点点毛茸茸。