Реализовать псевдонимы URL в CakePHP - PullRequest
0 голосов
/ 23 сентября 2011

Я новичок в CakePHP, хотя и не новичок в MVC-фреймворках для веб-разработки.Обычно я использую Drupal, когда создаю веб-сайты, которые не являются веб-приложениями, но мой сотрудник считает, что программирование с нуля гораздо лучше, чем использование готовых, хорошо протестированных и работающих решений.Вздох.

В любом случае, он согласился, по крайней мере, позволить мне использовать фреймворк, и я выбрал CakePHP, потому что: а) я всегда хотел его изучить, и б) я так люблю рельсы, что честно не могувернемся к Zend еще раз :) Как бы то ни было, я решил взять Cake, так что потерпите меня:)

Я установил множество контроллеров и прочего, реализующих все функции сайта, и теперь я 'Мне нужно настроить псевдонимы, похожие на Drupal.Такой псевдоним позволяет вам запрашивать http://www.example.com/this-be-me-page и отображать ту же страницу, которую вы видели, например, если бы вы запросили http://www.example.com/pages/42.Или верните то же самое, что и / article / 301, когда вы набираете / blog / the-самыми-превосходными-пост-когда-либо - я думаю, вы поняли, как это работает.

Я настроил базу данных и модель так, что яможно запросить «псевдоним» и получить «внутренний URL», то я застрял.Казалось, что вызов

$html = $this->requestAction($internal_url, array('return'));

вернул бы полностью визуализированный HTML, как если бы мой пользователь напрямую запросил $ internal_url, но это не так.Я получаю только HTML-код для представления действия, без всего того, что нужно для макета.

Я собираюсь использовать эту базу данных / контроллер, потому что мне бы хотелось, чтобы администраторы сайта могли редактировать псевдонимы через браузер, а неотредактировав некоторые неясные директивы маршрутизации или .htacces.Также гораздо быстрее войти в систему, создать страницу, установить псевдоним и выйти на обед.

Теперь: как мне это сделать?

РЕДАКТИРОВАТЬ Подражаяповедение app / webroot / index.php Я написал это действие для моего AliasController:

public function parse() {
    $alias = $this->request->params['url'];

    $record = $this->Alias->findByAlias($alias);
    $request = $record['Alias']['request'];

    $Dispatcher = new Dispatcher();
    $Dispatcher->dispatch(new CakeRequest($request), new CakeResponse(array('charset' => Configure::read('App.encoding'))));

    die;
}

За исключением имени (оно ничего не анализирует, не так ли?) оно работает нормально ... по крайней меределает то, что хотел.Но я все еще чувствую себя грязным :) У кого-нибудь есть предложения?

1 Ответ

1 голос
/ 26 сентября 2011

Извините за поздний ответ.

То, что вы хотите сделать, это заново выполнить метод синтаксического анализа, который использует CakeRoute.Таким образом, вы можете делать, как хотите, и анализировать запись, и даже использовать базу данных для получения идентификатора слизняка, такого как url.это объясняется более подробно здесь вы можете сделать это, как в примере, и добавить условие if, если if ничего не нашел и (числовой &&! empty ()) идет как обычный идентификатор ...

Надеюсь, что это работает, я тестирую его в 1.3, он ДОЛЖЕН работать в 2.0, так как это функция НОВАЯ для 1.3, поэтому вы можете создавать собственные маршруты (я думаю, что у многих людей была такая же проблема, как у вас)я думаю, что это сработает :) 1007 *

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