CakePHP 1.3 Плагин Ярлык Маршрут - PullRequest
1 голос
/ 20 сентября 2010

Я много искал в Интернете, но не смог найти какого-то конкретного решения.В CakePHP 1.3, в отличие от 1.2, если у вас был контроллер внутри плагина, и у обоих было одно и то же имя, вы могли получить доступ через « / », и он вызывал бы контроллер «по умолчанию».Но в 1.3, согласно этому:

http://cakeqs.org/eng/questions/view/setting_up_magic_routes_for_plugins_in_cakephp_1_3

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

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

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

спасибо

1 Ответ

0 голосов
/ 20 сентября 2010

Предполагая, что плагин называется "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 / rout.php:

Router::connect("/test/*", array("plugin" => "test", "controller" => "test"));

После этого запрос к / test / another / one / two будет правильно отображать «один, два» в браузере, а запрос к / test будет отображать «Индекс запрошенного плагина».

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

...