Захватите переменную из URL и затем передайте ее контроллеру CakePHP 2.0 - PullRequest
0 голосов
/ 24 февраля 2012

Я пытаюсь создать что-то вроде системы Wordpress-esque CMS для проекта, который я создаю.Я хочу, чтобы пользователь мог создавать страницы на лету, и чтобы они появлялись в определенных областях веб-сайта.

Я сделал нечто подобное в Symfony2, где контроллер захватывает определенную переменную из URL(как определено в файле route.yml, обычно $ id и т. д.), и затем я использую переменную в контроллере для отображения любого содержимого в базе данных.

Однако я не привык к CakePHP2.0, и изо всех сил пытаюсь найти то, что мне нужно.Я знаю, что это возможно, но я не знаю лучшего способа добиться этого.Тем более, что CakePHP использует файл маршрутов, отличный от Symfony.

Как мне получить переменную из URL-адреса и передать ее для использования внутри контроллера?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Под переменной вы подразумеваете параметры строки запроса GET, как в /foo?key=value? Вы можете получить к ним доступ в контроллере через объект запроса : $this->request->query['key'].

Если вы ищете что-то более интегрированное, вы можете использовать стандартные маршруты CakePHP или создать свои собственные.

Маршруты по умолчанию работают с URL-адресами, такими как /controller/action/param1/param2, и передают параметры действию по позиции. Например, /posts/view/521 отображается на вызов view(521) в PostsController, а /posts/byMonth/2012/02 отображается на вызов byMonth("2012","02").

Вы также можете использовать именованные параметры, и URL выглядят как /controller/action/key1:value1/key2:value2. В действиях контроллера вы можете прочитать их с $this->params['named']['key1'].

С помощью пользовательских маршрутов вы можете создавать свои URL-адреса как угодно. Вы не обязаны использовать шаблон / controller / action; Вы можете сделать /archives/2012-02 map для PostsController::byMonth(2012,2), или /512-post-title map для PostsController::view(512).

Обычно вы начинаете с маршрутов по умолчанию и добавляете собственные маршруты, когда решаете, что они вам нужны. Вы можете прочитать все о стандартных и пользовательских маршрутах в http://book.cakephp.org/2.0/en/development/routing.html

1 голос
/ 24 февраля 2012

Краткий ответ: это зависит.

Если вы хотите передать параметры в функцию, вам вообще не нужно связываться с маршрутами;каждый неназванный сегмент пути URL обрабатывается по порядку и передается действию в качестве параметров метода (поэтому /controller/action/1234 передает «1234» в качестве первого параметра методу action в классе контроллера controller).

Именованные параметры позволяют передавать параметры в любом месте строки URL и делать их необязательными.Форма является просто ключом: значением, и они доступны через $this->params['named'] в контроллере.

Последний параметр - это префиксная маршрутизация.Лучшее место для ускорения на этом пути - это, естественно, CakePHP Cookbook , но суть в том, что в определении маршрута вы можете назвать компонент пути в URL-адресе, добавив к нему двоеточие, идентичнокак маршруты по умолчанию показывают :controller, :plugin и :action.Вы можете определить любое имя, которое вам нравится, даже при желании применить требования к шаблону регулярных выражений, а затем получить к нему доступ через $this->params['variablename'] в контроллере.

...