У меня возникла проблема с добавлением пользовательской маршрутизации в мое приложение. Zend Framework 1:Zend Framework 1 добавить одно настраиваемое правило для маршрутизации
У меня уже работает приложение с маршрутизацией по умолчанию Zend. У меня есть много контроллеров и для некоторых из них я хочу использовать дружественные URLs, например: domain.com/cities/edit/ идентификатор/3 в domain.com/cities/edit/ Абу-Даби
Есть некоторые контроллеры для переключения на этот URL-адрес (в этом формате).
Я пытался настроить его ини файла:
resources.router.routes.slugurl.route = /:controller/:action/:slug
А также методом Bootstrap:
protected function _initSlugRouter()
{
$this->bootstrap('FrontController');
$router = $this->frontController->getRouter();
$route = new Zend_Controller_Router_Route('/:controller/:action/:slug/',
array(
'controller' => 'slug',
'action' => 'forward',
'slug' => ':slug'
)
);
$router->addRoute('slug',$route);
}
Основная проблема - с ини конфигурации - запрос идет непосредственно к контроллеру города (не тихоход). Второй (bootstrap) - также выполняет городской контроллер, но по умолчанию маршрутизация не работает так, как была, я не могу выполнить: domain.com/cities/, но domain.com/cities/index/ работает. Ошибка без действия определяется:
Action "forward" does not exist and was not trapped in __call()
я могу контролировать «слизняк» в контроллерах/переместить проверить в какую-то библиотеку, но я хотел бы сделать это только с маршрутизацией - это путь выглядит намного лучше для меня .. Пожалуйста, , как решить эту проблему?
редактировать с резюме решения Спасибо вам Max P. для интересной. Я решил это наконец - за последние 2 минуты :) У меня были неправильные правила в application.ini с маршрутизацией. Сейчас определено, что:
resources.router.routes.slugurl.route = /:controller/:action/:slug
resources.router.routes.slugurl.defaults.controller = :controller
resources.router.routes.slugurl.defaults.action = :action
resources.router.routes.slugurl.defaults.slug = :slug
Контроллер определяется так:
class CitiesController extends Crm_Abstract
Crm_Abstract имеет код:
<?php
class Crm_Abstract extends Zend_Controller_Action {
public function __construct(\Zend_Controller_Request_Abstract $request, \Zend_Controller_Response_Abstract $response, array $invokeArgs = array()) {
$params = $request->getParams();
if (!empty($params['slug'])) {
$modelSlug = Crm_Helper_Slug::getInstance();
$parameters = $modelSlug->redirectRequest($request);
if ($parameters !== false) {
foreach ($parameters as $key => $value) {
$request->setParam($key, $value);
}
}
}
parent::__construct($request, $response, $invokeArgs);
}
public function __call($methodName, $args) {
parent::__call($methodName, $args);
}
}
Помощник пробкового получить параметры для слизняка на определенном контроллере , URL-адрес для доступа к slug определяется/вычисляется вместо $ this-> url-to $ this-> slug, а остальная часть кода выполняется в slug-помощнике. Я не уверен, что мое решение на 100% уверенно, потому что это мой первый раз с маршрутизацией.
Главное, что мне просто нужно было изменить Zend_Controller_Action на Crm_Abstract, который расширяет Zend_Controller_Action. Одиночная строка - в каждом контроллере нет дополнительного пользовательского кода.
Если прокомментировать этот маршрут, то какая ошибка появляется для url domain.com/ города/редактировать/абу-даби? –
Я добавлю ошибку, только когда я получу действительный код ошибки - я не могу отформатировать его на комментарий :( – Mik
Я все еще не могу понять маршрутизацию ZF - всегда только одна вещь не работает хорошо - когда я добавляю маршрутизацию : 'resources.router.routes.slugurl.route = /: controller /: action /: slug' ' resources.router.routes.slugurl.defaults.controller =: controller' 'resources.router.routes.slugurl. defaults.action =: action' 'resources.router.routes.slugurl.defaults.slug =: slug' Я не могу получить доступ к URL: domain.com/developers/ - код ошибки: Action« action »не существует и не попал в ловушку __call(). Похоже, что добавление правила маршрута - уничтожает маршрутизацию по умолчанию, но я хочу, чтобы он сохранялся. – Mik