CakePHP Router :: connect () config, анализ пользовательских параметров - PullRequest
1 голос
/ 03 ноября 2010

У меня есть следующая конфигурация route.php

Router::connect('/:type/:slug;:id', array(
        'controller' => 'content',
        'action' => 'show',
        'type' => null,
        'slug' => null,
        'id' => null,
    ),
    array(
        'type' => '(articles|releases|answers|videos)',
        'slug' => '[a-zA-Z0-9\-]+',
        'id' => '[0-9]+',
        'pass' => array('type', 'slug', 'id'),
    ));

, и я пытаюсь проанализировать следующий URL:

/answers/effective-language-therapy-for-people;368

И маршрутизатор выводит меня направильный контроллер и действие, но дамп $this->params показывает мне, что неправильно идентифицировать $id и $slug

Array
(
    [type] => answers
    [slug] => answers
    [id] => effective-language-therapy-for-people
    [named] => Array
        (
        )

    [pass] => Array
        (
            [0] => answers
            [1] => answers
            [2] => effective-language-therapy-for-people
        )

    [controller] => content
    [action] => show
    [plugin] => 
    [url] => Array
        (
            [ext] => html
            [url] => answers/effective-language-therapy-for-people;368
        )

    [form] => Array
        (
        )
)

Итак, что дает?мое регулярное выражение неправильно, подход пропускает что-то, или что?Любые идеи?

Примечание: я прочитал:


ОБНОВЛЕНИЕ,разрешенная и рабочая версия

Router::connect('/:type/:slug:splitter:id', array('controller' => 'content', 'action' => 'view',), array(
    'type' => 'articles|releases|answers|videos',
    'slug' => '[a-zA-Z0-9\-]+',
    'splitter' => '[\;\-\|]+',
    'id' => '[0-9]+',
    ));

1 Ответ

7 голосов
/ 03 ноября 2010

Попробуйте:

Router::connect('/:type/:slug;:id', array(
    'controller' => 'content',
    'action' => 'show',
    'type' => null,
    'slug' => null,
    'id' => null,
),
array(
    'type' => 'articles|releases|answers|videos',
    'slug' => '[a-zA-Z0-9\-]+',
    'id' => '[0-9]+',
    'pass' => array('type', 'slug', 'id'),
));

Проблема заключалась в типах в скобках (), которые не поддерживаются в CakePHP.

...