Jump to content
  • 0

Интерпретация url


Bolmazov
 Share

Question

Осваиваю Zend Framework. Столкнулся с такой ситуацией:

Рассмотрим url "http://site/admin/tree/edit/" соответственно :module = 'admin'; :controller = 'tree'; :action = 'edit'.

Что бы добавить к этому url параметры :article = 1 и tupe = 'news' нужно писать, как я понимаю, так "http://site/admin/tree/edit/article/1/type/news", а ведь можно еще и так: "http://site/admin/tree/edit/type/news/article/1". В принципе не понимаю зачем такое чудо нужно!? Но вопрос не столько в этом, а в том как заставить Zend Framework правильно понимать такие url как "http://site/admin/tree/edit/news/1"?

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

LokiDi L0ck, читал я. Хорошо. Тогда можно тебе задать следующий вопрос:

Можно до вызова диспетчерезации фронт-контроллером написать так:

 //// Файл маршрутизации 
$router = new Zend_Controller_Router_Rewrite();

$router->addRoute('tree',
new Zend_Controller_Router_Route('admin/tree/edit/:article/:type')
);
/////

//// Bootstrap
$FrontController->setRouter($router);

$frontController->dispatch();
////

и всё будет нормально. Но что-то меня не радует перспектива по каждому чиху лезть в файл маршрутизации. Пытался локализовать правило в конкретном контроллере, но не получается.

	class Admin_TreeController extends Zend_Controller_Action{
function init()
{

$router = new Zend_Controller_Router_Rewrite();

$router->addRoute('tree',
new Zend_Controller_Router_Route(':module/:controller/:action/:article/:type')
);
$this->getFrontController()->setRouter($router);

}...

В чем ошибка? Возможно ли определить правило маршрутизации в контролере? Не вредно ли мое стремление локализации правила в контроллере?

Link to comment
Share on other sites

  • 0
Возможно ли определить правило маршрутизации в контролере?

Нельзя. Маршрутизация определяет какой контроллер должен быть запущен и выполняется только один раз перед диспетчеризацией (читать последний абзац).

Не обязательно самому создавать объект Zend_Controller_Router_Rewrite. Его можно получить из фронт контроллера.

$router = $frontController->getRouter();
$router->addRoute('tree', new Zend_Controller_Router_Route(':module/:controller/:action/:article/:type'));

Но что-то меня не радует перспектива по каждому чиху лезть в файл маршрутизации.

Все маршруты должны загружаться перед диспетчеризацией. Можете закэшировать их.

Link to comment
Share on other sites

  • 0

Спасибо. Понимал, что по логике получается именно так. Но замута с парами ключ - значение, имхо, стремная вещь. Кому нужны x! (где x - количество пар ключ-значение) разных url ведущих на один и тот же ресурс... (или я ошибаюсь?)

Если делать через роутеры, то можно правило:

$router->addRoute('tree',
new Zend_Controller_Router_Route('admin/tree/edit/:section_id', array('module'=>'admin', 'controller' => 'tree', 'action' => 'edit'))
);

как-то покороче переписать (именно для этого url), исходя из того, что должно быть и так понятно, что admin это модуль, tree - контроллер, edit - действие?

Link to comment
Share on other sites

  • 0
Если делать через роутеры, то можно правило как-то покороче переписать (именно для этого url)

Нельзя.

Но замута с парами ключ - значение, имхо, стремная вещь

Выглядит лучше чем script.php?param1=value1&param2=value2.

В вашем случае роутер не обязателен. Не надо плодить лишние сущности (для которых понадобится дополнительная память) лишь ради незначительного укорачивания url.

Для понимания эффективного использования zf нужно время.

К примеру у меня для отображения статических страниц используется всего один роутер.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy