Динамические страницы в cakePHP - PullRequest
2 голосов
/ 01 апреля 2011

Итак, я создал свой первый клиентский веб-сайт с cakePHP и столкнулся с проблемой.

Я пытаюсь создать систему, похожую на WordPress, где вы можете создавать новые страницы (просто заголовок,slug и content), и они обслуживаются до своего адреса slug (т. е. About будет доступно на mysite.com/about).

Я создал свой собственный контроллер и модель для 'Pages' (перезаписываяКонтроллер основных страниц) и настроил простые функции (view, admin_add, admin_delete).Моя модель проста, только $ name, чтобы он мог подключиться к БД.

Я почти уверен, что моя проблема заключается в config / rout.php.Вот код, который я сейчас использую:

App::import('model', 'Page');
$Page = new Page();
$pages = $Page->find('list', array('fields' => array('id', 'slug')));
Router::connect('/:pages', array('controller' => 'pages'), array('Page' => implode($pages, '|')));

Это просто не работает.Когда я захожу на страницу, которая у меня есть (например, mysite.com/newpage), она сообщает, что контроллер новой страницы не найден.

ПОЖАЛУЙСТА, ПОМОГИТЕ!Я в сжатые сроки:)

Спасибо,

~ Harley

1 Ответ

4 голосов
/ 01 апреля 2011

Вам нужно расширить класс CakeRoute.Поместите туда свой код модели, а затем передайте имя этого класса в определение маршрута в routs. Php

rout.php будет выглядеть примерно так:

App::import('Lib', 'routes/MyCustomRoute');
Router::connect('/:page', array('controller'=>'pages', 'action'=>'display'), array('routeClass' => 'MyCustomRoute'));

Затем в libs/routes/my_custom_route.php

class MyCustomRoute extends CakeRoute {
function parse($url) {
    $params = parent::parse($url);
    //import your model
    App::import('Model','Page');
    //create model object
    $Page = new Page();
    //find using $params['page'];
    if($Page->find('first', array('conditions'=>array('page.slug'=>$params['page'])))){
         //return $params if successfull match 
       return $params
    } else 
       return false;
    //return false to fall through to next route.

}

...