CakePHP: Как получить идентификатор строки, которая соответствует слагу?

У меня есть модель под названием «Сообщения» с полем, называемым slug. Я хочу создать функцию маршрутизации, чтобы сделать это: www.mysite.com/slug. Итак, я создал класс Slug, который используется в файле route.php, который выглядит так, и он работает не так, как я хочу:

class SlugRoute extends CakeRoute {

   function match($url) 
   {
        App::import('Model', 'Post');
        $Post = new Post();
        $Post->find('first', array('conditions' => array('Post.slug' == $url)));
        $id = $Post['id'];
        return $id;
   }
}

Вот строка кода в моем файле route.php:

Router::connect('/:slug', array('controller' => 'posts', 'action' => 'view'), array('routeClass' => 'SlugRoute'));

Все, что я хочу сделать, это выполнить поиск в моих сообщениях, чтобы сопоставить входной слаг в URL-адресе с тем, что у меня есть в моей базе данных, затем вернуть идентификатор и автоматически связать его с этим идентификатором.

Что я делаю неправильно? Заранее спасибо!!


person Monochrome    schedule 14.03.2011    source источник


Ответы (2)


Я нашел этот пример, который делает то же самое, что и вы, но использует метод parse вместо метода match. Посмотрите: http://mark-story.com/posts/view/using-custom-route-classes-in-cakephp

person JohnP    schedule 14.03.2011
comment
Я попробовал это и спросил автора, почему это не работает. К сожалению, это не так, но спасибо за вашу помощь. - person Monochrome; 15.03.2011

Попробуй это

$Post = new Post();
    $data = $Post->find('first', array('conditions' => array('Post.slug' => $url)));
    $id = $data['Post']['id'];
person Headshota    schedule 14.03.2011
comment
@shota, я тоже пробовал. Вероятно, это правильный синтаксис, но он тоже не работает. - person Monochrome; 15.03.2011
comment
включите режим отладки, и вы увидите, какой SQL генерируется. это поможет понять, что не так. - person Headshota; 15.03.2011
comment
Вы получаете какие-либо ошибки? скопируйте этот SQL в свой phpmyadmin и посмотрите, возвращает ли он нужную вам строку. - person Headshota; 15.03.2011
comment
@shota, я попробовал ваш новый код и получил следующие ошибки: array_merge() [function.array-merge]: Argument #1 is not an array [CORE\cake\dispatcher.php, line 267] Undefined index: controller [CORE\cake\dispatcher.php, line 121] и следующую ошибку «Отсутствует контроллер»: Error: Controller could not be found. SQL кажется почти правильным, но там есть косая черта: SELECT Post.id, Post.slug, Post.title, Post.body, Post.created, Post.modified ОТ posts КАК Post ГДЕ Post.slug = '/около' ПРЕДЕЛ 1 - person Monochrome; 16.03.2011