CakePHP 1.3插件快捷方式路由

时间:2010-09-20 02:23:45

标签: php plugins routes cakephp-1.3 cakephp-1.2

我在网上搜索了很多但是我找不到任何特定的解决方案 在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公告中的内容,但还不够清楚......

感谢

1 个答案:

答案 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的请求将显示“请求的插件索引”。

我认为这不是一个糟糕的方式,插件消费者方面的大惊小怪,插件代码中只有一点点毛茸茸。