маршруты CakePHP изменяют имя контроллеров / выбирают имя контроллеров - PullRequest
3 голосов
/ 23 декабря 2011

Я создал маршрут, аналогичный этому:

Router::connect("/backend/:controller/:action/*");

И теперь я хочу направить каждый контроллер, который соответствует этому шаблону, для переименования в нечто вроде backend_: controller.

Как-то так:

Router::connect("/backend/:controller/:action/*", array('controller' => 'backend_:controller'));

Пример: если будет вызван URL-адрес www.example.com/backend/settings/myaction, он направит к контроллеру «backend_settings» и вызовет действие «myaction»!

Но, с другой стороны, если некоторые из них называются www.example.com/settings, он будет перенаправлять на «настройки» контроллера.

Предполагается, что URL останется таким, каким его называли.CakePHP должен использовать только измененное имя контроллера!

Я надеюсь, что кто-то подскажет мне лучшее решение, которое я должен использовать для этой проблемы.Заранее спасибо!

Ответы [ 2 ]

5 голосов
/ 09 июня 2012

Вы можете использовать свойство routeClass при указании маршрута и использовать пользовательский класс маршрута.

Это моя реализация класса CakeRoute, которая делает именно то, что вы описали (добавляет префикс контроллера к вашему контроллеру):

// ControllerPrefixRoute.php file in app/Routing/Route/

App::uses('CakeRoute', 'Routing/Route');

class ControllerPrefixRoute extends CakeRoute {

    /**
     * Parses a string url into an array. If a controller_prefix key is found it will be appended to the
     * controller parameter
     *
     * @param string $url The url to parse
     * @return mixed false on failure, or an array of request parameters
     */
    public function parse($url) {

        $params = parent::parse($url);

        if (!$params) {
            return false;
        }
        $params['controller'] = $params['controller_prefix'].'_'.$params['controller'];
        return $params;
    }

}

А вот как это использовать:

// inside routes.php file in app/Config/

App::uses('ControllerPrefixRoute', 'Routing/Route');

Router::connect("/:controller_prefix/:controller/:action/*", array(), array('routeClass' => 'ControllerPrefixRoute'));

Так что этот URL /backend/settings/myaction будет вызывать BackendSettingsController::myaction

1 голос
/ 23 декабря 2011

может быть, вам нужен префикс маршрутизатора.

перейдите в core.php и добавьте следующую строку:

Configure::write('Routing.prefixes', array('backend'));

и это все ... вам не нужнодобавить маршруты .. так что теперь www.example.com/backend/settings/add будет искать метод с именем backend_add() в контроллере настроек

И www.example.com/settings/add будет вызывать метод с именем add() в контроллере настроек

здесь вы найдете лучшие примеры =)

надеюсь, это поможет

...