2010-11-04 6 views
1

Ребята У меня есть следующая структура в моем проекте.Zend Framework вопрос об отдыхе и модулях

application/ 
    Bootstrap.php 
    configs/ 
     application.ini 
    modules/ 
     default/ 
     controllers/ 
     models/ 
     views/ 
     Bootstrap.php 
     main/ 
     controllers/ 
      UserController.php 
     forms/ 
     models/ 
      resources/ 
      validate/ 
     views/ 
      scripts/ 
       user/ 
        complete-registration.phtml 
        index.phtml 
        register.phtml 
     Bootstrap.php 
     rest/ 
     controllers/ 
      LoginController.php 
     models/ 
     views/ 
     Bootstrap.php 

Теперь проблема. Я определил несколько действий в UserController.php, которые, по моему мнению, не имеют доступа. Напр. если я перейду в localhost/main/user/register, я не могу это получить. Однако я просматриваю localhost/main/user, он работает.

Я понятия не имею, что это может быть, но моя дикая догадка - это то, что связано с моим Bootstrap.php. Во время отладки я прокомментировал, что маршрут останова инициализирован в основном bootstrap.php, и он, похоже, сработал. Я дал все файлы, на которые, я думаю, повлиял это. Если бы я мог знать, что это могло бы быть, это было бы потрясающе. Уже потратили, как несколько дней, пытаясь понять это.

Bootstrap.php

<?php 

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    // Commenting this seems to make the module auto initializing work. 
    protected function _initRestRoute() 
    { 
     $this->_logger->info('Bootstrap ' . __METHOD__); 
     $this->bootstrap ('frontController'); 
     $frontController = Zend_Controller_Front::getInstance(); 
     //$restRoute = new Zend_Rest_Route ($frontController); 
     //$frontController->getRouter()->addRoute ('default', $restRoute); 
     $restRoute = new Zend_Rest_Route($frontController, array(), array('rest')); 
     $frontController->getRouter()->addRoute('rest', $restRoute); 
    } 
} 

Главная/Bootstrap.php

<?php 

class Main_Bootstrap extends Zend_Application_Module_Bootstrap 
{ 

} 

Главная/Контроллеры/UserController.php

<?php 

class Main_UserController extends Zend_Controller_Action 
{ 

    protected $_model; 

    public function init() 
    { 
     // Get the default model 
     $this->_model = new Main_Model_User(); 
     // Add forms 
     $this->view->registerForm = $this->getRegistrationForm(); 
    } 

    public function indexAction() 
    { 
    } 

    public function registerAction() 
    { 
    } 

    public function completeRegistrationAction() 
    { 
     $request = $this->getRequest(); 
     if (! $request->isPost()) 
     { 
      return $this->_helper->redirector ('register'); 
     } 
     if (false === $this->_model->registerUser ($request->getPost())) 
     { 
      return $this->render ('register'); 
     } 
    } 

    public function getRegistrationForm() 
    { 
     $urlHelper = $this->_helper->getHelper ('url'); 
     $this->_forms ['register'] = $this->_model->getForm ('userRegister'); 
     $this->_forms ['register']->setAction ($urlHelper->url ( 
      array (
       'controller' => 'user', 
       'action' => 'complete-registration' 
      ), 
      'default')); 
     $this->_forms ['register']->setMethod ('post'); 
     return $this->_forms ['register']; 
    } 
} 

application.ini

[production] 
autoloadernamespaces[] = "Zend_" 
autoloadernamespaces[] = "SB_" 

phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 

; front controller 
resources.frontcontroller.moduledirectory = APPLICATION_PATH "/modules" 

; modules 
resources.modules[] = 

resources.frontController.params.displayExceptions = 1 

resources.db.adapter = "PDO_MYSQL" 
resources.db.isdefaulttableadapter = true 
resources.db.params.dbname = "****" 
resources.db.params.username = "*****" 
resources.db.params.password = "*******" 
resources.db.params.host = "*******" 
resources.db.params.charset = "UTF8" 

[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

Просьба представить более подробную информацию об этой части: «если я иду на локальный/Главная/пользователь/регистр Я не могу получить доступ к этому. - Что происходит, когда вы пытаетесь? Можете ли вы дать код действия контроллера? Любые сообщения об ошибках? – Gordon

+0

Yup Я дал код контроллера выше. Это ничего не значит, кроме вызова формы и отображения полной регистрации после отправки формы. – nixgadgets

+0

Что касается «если я перехожу к localhost/main/user/register, я не могу получить доступ к этому». im получение страницы не найдена ошибка. я не могу просмотреть любые действия на любом контроллере. я считаю, что это имеет какое-то отношение к маршруту отдыха. – nixgadgets

ответ

1

Удалось заставить его работать, выполняя следующие действия. Надеюсь, это будет полезно для кого-то.

Создал маршрут в плагине переднего контроллера.

class SB_Controller_Plugin_Initialize extends Zend_Controller_Plugin_Abstract 
{ 

    public function routeStartup(Zend_Controller_Request_Abstract $request) 
    { 
     $frontController = Zend_Controller_Front::getInstance(); 
     $restRoute = new Zend_Rest_Route($frontController, array(), array('rest')); 
     $router = $frontController->getRouter(); 
     $router->addRoute('rest', $restRoute); 
    } 
} 

в application.ini,

resources.frontController.plugins.Initialize = "SB_Controller_Plugin_Initialize" 
0

Возможно решение в следующем:
1) Существуют ли ваши registerAction?
2) Ваши view для этого действия существуют? /views/scripts/user/register.phtml

+0

yup все эти вещи существуют. как я сказал, если я прокомментирую маршрут отдыха в бутстрапе, он работает! – nixgadgets

1

Добавьте это в главном бутстрапе

protected function _initRoutes() 
    { 
     $front = Zend_Controller_Front::getInstance(); 
     $router=$front->getRouter(); 
     $restRoute=new Zend_Rest_Route($front,array(),array('yourrestmodule')); 
     $router->addRoute('yourrestmodule',$restRoute); 
    } 

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

  • Нет связанных вопросов^_^