Ярлык плагина CakePHP 1.3

Я много искал в Интернете, но не смог найти конкретного решения этой проблемы.
В 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

Он был удален, и таким образом можно получить доступ только к действию «индекс» в контроллере плагинов по умолчанию.

Я подумал о том, чтобы добавить дополнительный код в мой файл route.php и пройтись по всем плагинам в моем приложении, создав такие маршруты для каждого действия в контроллерах, названных в честь плагина, но это не кажется правильным. ...

любые другие предложения, чтобы сделать эту работу в 1.3? или, по крайней мере, какую-то очень конкретную документацию по коду этого конкретного изменения? Я уже читал кое-что в анонсе 1.3.0-RC4, но это было недостаточно ясно..

Благодарность


person Cake Baker    schedule 20.09.2010    source источник


Ответы (1)


Предполагая, что плагин называется «тест», вы можете сделать что-то вроде этого в 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/two будет правильно отображать «один, два» в браузере, а запрос к /test отобразит «Индекс запрошенного плагина».

Я думаю, что это неплохой путь, минимальная суета на стороне потребителя плагина, только немного пуха в коде плагина.

person Sam Day    schedule 20.09.2010