CakePHP маршрутизация без идентификатора? - PullRequest
4 голосов
/ 12 ноября 2009

Есть ли способ направить URL-адреса в торте без указания идентификатора в URL-адресе?

Так что вместо www.mydomain.com/id/article-name я просто хочу www.mydomain.com/article-name

Я следил за этим. http://book.cakephp.org/view/543/Passing-parameters-to-action

Ответы [ 2 ]

6 голосов
/ 12 ноября 2009

Конечно. Единственным требованием для этого является то, что в URL достаточно уникальной информации, чтобы определить нужную статью. Если /article-name уникален в вашей базе данных, вы можете использовать его для поиска нужной записи.

В config / rout.php:

// ... configure all normal routes first ...

Router::connect('/*', array('controller' => 'articles', 'action' => 'view'));

В контроллерах / article_controller.php:

function view ($article_name) {
    $article = $this->Article->find('first', array(
        'conditions' => array('Article.name' => $article_name)
    ));
    ...
}

Будьте осторожны, чтобы ваши продукты не назывались так, как они могли бы законно появиться в URL, чтобы не столкнуться с конфликтами. URL http://example.com/pages указывает на «страницы» продукта или на array('controller' => 'pages', 'action' => 'index')? Для этого вам также необходимо определить ваши маршруты в routes.php таким образом, чтобы сначала были доступны все ваши контроллеры, и только неопределенный остаток будет передан в ваш ArticlesController. Посмотрите на третий параметр Routes::connect, который позволяет вам указать фильтр RegEx, который вы можете использовать для этой цели.

0 голосов
/ 27 февраля 2011

Вы можете сделать это:

// In routes.php
$rewrites = array();
$rewrites = am($rewrites, ClassRegistry::init('Article')->rewrites());
$rewrites = am($rewrites, ClassRegistry::init('AnotherModel')->rewrites());
$rewrites = am($rewrites, ClassRegistry::init('YetAnother')->rewrites());
foreach ($rewrites as $rewrite) {
    Router::connect($rewrite[0], $rewrite[1], $rewrite[2]);
}

С помощью метода децезе вы можете иметь только одну возможность поймать всех. В этом методе вы можете определить весь стек, если хотите.

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

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