2012-03-31 2 views
2

ОК, я довольно новичок в этом, и вспахиваю все учебники и отвечаю на вопросы, которые я могу найти. К сожалению, я не смог найти полное приложение application.ini, которое работает для меня.Zend Framework application.ini Проблемы с маршрутизатором

Где-то я должен был набить - я могу получить базовую маршрутизацию, работающую нормально, но как только я попытаюсь добавить переменную, я не могу заставить ее работать. So/guide-to работает, но/guide-to/london дает ошибку «где-то не указано»

Я выполняю всю маршрутизацию в application.ini. Вот мой файл:

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 1 

resources.layout.layoutPath = APPLICATION_PATH "/views/layouts/" 
resources.layout.layout = wrapper 

resources.view = "" 

resources.router.routes.home.route = "/stuff" 
resources.router.routes.home.defaults.module = default 
resources.router.routes.home.defaults.controller = index 
resources.router.routes.home.defaults.action = index 

resources.router.routes.guide-to.route = "/guide-to" 
resources.router.routes.guide-to.defaults.controller = "destination" 
resources.router.routes.guide-to.defaults.action = "guide-to" 

resources.router.routes.place.route = "guide-to/:someplace" 
resources.router.routes.place.defaults.controller = "destination" 
resources.router.routes.place.defaults.action = "guide-to" 

resources.router.routes.guides.route = "/guiderrrs" 
resources.router.routes.guides.defaults.controller = destination 
resources.router.routes.guides.defaults.action = guiderrrs 

resources.router.routes.guidez.route = "/guidez" 
resources.router.routes.guidez.defaults.controller = destination 
resources.router.routes.guidez.defaults.action = guidez 

pagination.item.count.per.page = 10 

[staging : production] 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

Может ли кто-нибудь выявить проблему? Или у кого-нибудь есть рабочее приложение. Они могут делиться?

Все вклады с благодарностью получены!

+0

одна вещь, которую следует иметь в виду с помощью маршрутов «Маршруты сопоставляются в обратном порядке, поэтому убедитесь, что ваши самые общие маршруты определены в первую очередь». Я не думаю, что это твоя проблема, но я не уверен, так как не уверен, что первый маршрут первый или последний :) – RockyFord

ответ

1

Необходимо указать значение по умолчанию для переменной someplace. где-то переменная, поэтому вам нужно указать значение по умолчанию. В противном случае по умолчанию будет определено значение undefine. Я думаю так:

resources.router.routes.place.defaults.someplace="deault_value" 

На мой взгляд, это не очень хорошая идея, чтобы сопоставить URL для точных имен. потому что url становится действительно связанным с приложением, которое может измениться.

Я предпочитаю использовать общий роутер в своем бутстрапе. а затем отобразите мой URL-адрес. используя этот подход, моя система маршрутизации такая же, как я начинаю новый проект. Используйте seomthing, как это, в вашем бутстрапе. это даже меньше, чем определить все маршруты , потому что если что-то изменить вам нужно будет изменить назад

protected function _initRoutes(){ 
    $front_controller=self::getFrontController(); 
    $router = $front_controller->getRouter(); 

    $standard_route=new Zend_Controller_Router_Route(
     ':lang/:module/:controller/:action/:param_one/:param_two/:param_three/*', 
     array( 'lang'=>$user_language, 
       'module'=>'default', 
       'controller'=>'index', 
       'action' => 'index', 
       'param_one'=>NULL, 
       'param_two'=>NULL, 
       'param_three'=>NULL 
     ) 
    ); 
    $router->addRoute('standard', $standard_route); 


    $default_route=new Zend_Controller_Router_Route(
     ':lang/:controller/:action/:param_one/:param_two/:param_three/*', 
     array('lang'=>$user_language, 
       'module'=>'default', 
       'controller'=>'index', 
       'action' => 'index', 
       'param_one'=>NULL, 
       'param_two'=>NULL, 
       'param_three'=>NULL 
     ) 
    );  
    $router->addRoute('default', $default_route); 


    $front_controller->setRouter($router); 


} 

Lang моя собственная переменная для интернационализации Suppor.

+0

Эту работу или Эван - фантастическая работа! Мне пришлось изменить только один бит - добавлены значения по умолчанию - но теперь я снова на ходу! resources.router.routes.defaults.place.someplace = "deault_value" – Andrew

1

Ваша конфигурация верна. Я считаю, что вы используете параметр неправильно, судя по ошибке.

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

class DestinationController extends Zend_Controller_Action 
{ 
    public function guideToAction() 
    { 
     var_dump($this->getRequest()->getParams()); 
     var_dump($this->getRequest()->getParam('someplace')); 
     exit; 
    } 
} 

Это работает для меня с конфигурацией, которую вы указали.

Надеюсь, это поможет.

Смежные вопросы