0

У меня есть проект, который я начал без использования структуры модуля в ZF 1, теперь мне нужно разместить структуру модуля для управления пользователями (имеет больше смысла для меня).ZF Zend_Controller_Router_Route_Module С и с модулем по умолчанию по умолчанию

Моя проблема маршрут «по умолчанию» должен попытаться пойти с: контроллер /: Действие /: идентификатор и модуль маршрута
должен идти с: модуль /: контроллер /: Действие /: идентификатор по умолчанию от ZF 1, использовать вышеуказанное без: id
, но для моей «логики» требуется поле: id, как я могу это сделать?

Что я стараясь пришел:

protected function _initModuleAutoload() 
{ 
    $modelLoader = new Zend_Application_Module_Autoloader(
        array('namespace' => 'DM', 
         'basePath' => APPLICATION_PATH . '/modules/default') 
        , array('namespace' => 'UM', 
       'basePath' => APPLICATION_PATH . '/modules/users') 
    ); 

    $modelLoader->addResourceType('service', 'services', 'Service'); 
    $modelLoader->addResourceType('serviceplugin', 'services/plugins', 'Service_Plugin'); 

    return $modelLoader; 
} 

public function _initFrontController() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $router = $front->getRouter(); 

    $route1 = new Zend_Controller_Router_Route(
        ':module/:controller/:action/:id/', 
        array(
         'id' => '\d+' 
         , 'module' => 'default' 
         , 'controller' => 'index' 
         , 'action' => 'index' 
        ) 
    ); 

    $router->addRoute('default', $route1); 

    $front->addModuleDirectory(APPLICATION_PATH . "/modules/"); 

    $front 
      ->registerPlugin(new Far_Access_Plugin_Identity(), 1) 
      ->registerPlugin(new Far_Access_Plugin_Access(), 2) 
      ->throwExceptions(true) 
    ; 

    return $front; 
} 

также пытался создать второй маршрут для пользователей, а не по умолчанию, но не работает.

Любые идеи? Что я делаю не так?

Помощь от irc в freenode была предоставлена ​​в канале #zftalk, когда я предоставил эту ссылку.

Bittarman: crash82: добавить требования к идентификатору, поэтому оно должно быть [\ d] +
Bittarman: или, просто добавить экземпляр Zend_Controller_Router_Route_Module прикован к Zend_Controller_Router_Route только с идентификатором в нем , с установкой по умолчанию для id, как false.
Bittarman: также, _initModuleAutoload, бессмысленно Bittarman: иметь свой модуль «по умолчанию» в директории модулей, является своего рода неправильно
Bittarman: и вы остановите FrontController ресурс из работает, имея _initFrontController
Bittarman: так resources.frontController больше не будет работать.

crash82: гул ... Так много проблем :(, так что я могу просто поместить модуль «по умолчанию» в каталог приложений и любые другие модули могут продолжать загружаться из модулей/пути

?

Bittarman: да :)

crash82: собирается попробовать, что Bittarman: и каждый модуль, который имеет загрузчик, поставляет свой собственный загрузчик модуль ресурсов
Bittarman: так, если вы идете создать больше похоже, что вы в конечном с двумя для каждого модуля.
Bittarman: вы были бы удивлены, сколько людей это делает.
Bittarman: s/THT/что/

+1

маршрутизации по умолчанию в текущей версии ZF всегда проверяет модуль при маршрутизации. Добавление модуля не будет влиять на маршрутизацию, если вы используете маршруты по умолчанию. Просто добавьте модуль в качестве первого параметра, и он должен работать. если вы хотите, проверьте код в 'Zend_Controller_Router_Route_Module' – RockyFord

+0

Да, это часть ответа. :-) Спасибо –

ответ

0

Когда мне нужно передать параметр в URL в моем сценарии я использую один из нескольких методов. Для большинства простых вещей нет необходимости создавать новый маршрут.

  1. <a href="/music/index/album/id/<?php echo $variable->id ?>"><?php echo $track->album ?></a>. Передайте параметр как/id/album_id
  2. используйте помощник вида url(): <?php echo $this->url(array('controller' => 'index', 'action' => 'index', 'id' => $variable->id)); ?> Этот помощник также примет модуль в качестве первого параметра.
  3. Первые 2 работы в сценариях вида, чтобы сделать то же самое в контроллере, вы можете использовать помощник действия reidrector: $this->getHelper('Redirector')->gotoSimple('action'=> 'someAction', 'controller' => 'someController', 'module' => 'someModule', array('id' => $id); с контроллером, модулем и параметрами, являющимися необязательными по умолчанию NULL.
  4. или вы можете использовать использование служебной утилиты _forward(): $this->_forward($action, $controller, $module, array($params)) этот же синтаксис, как gotoSimple() has.

Есть и другие пути для достижения такого рода маршрутизации, я оставлю его вам, чтобы найти остальные, но вы можете начать с Action Helpers, utility methods и view helpers

+0

да, но я не хочу указывать id/1 только/1, я ленивый ... :) –

+0

так или иначе вам нужно будет указать переменные, ваш выбор о том, как вы это делаете. – RockyFord