Zend Framework вопрос об отдыхе и модулях - PullRequest
1 голос
/ 04 ноября 2010

Ребята, у меня есть следующая структура в моем проекте.

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

Ответы [ 3 ]

1 голос
/ 07 ноября 2010

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

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

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"
1 голос
/ 03 апреля 2013

Добавьте это в основной загрузчик

protected function _initRoutes()
    {
        $front = Zend_Controller_Front::getInstance();
        $router=$front->getRouter();
        $restRoute=new Zend_Rest_Route($front,array(),array('yourrestmodule'));
        $router->addRoute('yourrestmodule',$restRoute);
    }
0 голосов
/ 04 ноября 2010

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

...