CakePHP маршрутизация с разделителем двоеточий - PullRequest
1 голос
/ 30 августа 2010

Мне нужно создать маршруты, которые содержат двоеточие для получения URL-адресов, таких как http://app.com/prjct:a9b5c.Очевидно, что в настоящее время проще использовать косую черту вместо маршрутизации по умолчанию.

$SLUG = array('slug' => '[-_A-Za-z0-9]+');
Router::connect('/prjct/:slug', array('controller' => 'projects', 'action' => 'show'), $SLUG);

Но в спецификациях маршрутов в качестве специального индикатора используется символ двоеточия, что мешает моей наивной попытке заменить вторую косую черту выше другой двоеточием.,

Как использовать двоеточия в этом случае для маршрута?

Ответы [ 2 ]

1 голос
/ 30 августа 2010

Вы можете использовать именованные параметры, как описано в CakePHP Cookbook . Введите код ниже в вашем app / config / rout.php:

// Parse only the 'prjct' parameter if the current action is 'show' and the controller is 'projects'.
Router::connectNamed(array('prjct' => array('action' => 'show', 'controller' => 'projects')));

// Then set default route to controller 'projects' and action 'show
Router::connect('/', array('controller' => 'projects', 'action' => 'show'));

В ваших проектах_controller.php:

function show(prjct = null) {
    // Check if prjct match the pattern
    $pattern = '[-_A-Za-z0-9]+';
    if(!preg_match($pattern, prjct)){
        // Redirect somewhere else
    }
    // Rest of your code here
} 
1 голос
/ 30 августа 2010

Я думаю, что это действительно выходит за рамки простых маршрутов. Я вижу два варианта:

  1. Используйте пользовательский класс разбора маршрута, как описано здесь . По этой теме не так много документации, но вы можете расширить существующий класс и поэкспериментировать с ним, чтобы получить представление о том, что он делает. Затем настройте его под свои нужды.

    class MyRoute extends CakeRoute {
        public function parse($url) {
            debug($url);    // input
            $route = parent::parse($url);
            debug($route);  // output
            return $route;
        }
    }
    
  2. Направьте эти URL-адреса с помощью универсального маршрута на контроллер, где параметр будет доступен в качестве именованного параметра в $this->params['named']. Делай то, что тебе нужно делать там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...