代码之家  ›  专栏  ›  技术社区  ›  sanders

我的基于Zend框架的站点存在无法定义的问题

  •  0
  • sanders  · 技术社区  · 16 年前

    最近我不得不在我的ubuntu机器上重新安装我的开发站点,因为我的系统在操作系统更新后崩溃了。4天后,我的网站仍然没有正常运行。 每当我做一个动作,其中有一个数据库上的动作,它就会停止工作。

    例如,在注册新用户时,出现以下错误:

    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP Notice:  Trying to get property of non-object in /var/www/nrka2/application/bootstrap/Bootstrap.php on line 169, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   1. {main}() /var/www/nrka2/public/index.php:0, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   2. require() /var/www/nrka2/public/index.php:2, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   3. Zend_Application->bootstrap() /var/www/nrka2/application/application.php:23, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   4. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application.php:355, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   5. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:583, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   6. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:619, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:20 2010] [error] [client 127.0.0.1] PHP   7. Bootstrap->_initViewSettings() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:666, referer: http://nrka2/user/register
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP Notice:  Trying to get property of non-object in /var/www/nrka2/application/bootstrap/Bootstrap.php on line 169, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP Stack trace:, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   1. {main}() /var/www/nrka2/public/index.php:0, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   2. require() /var/www/nrka2/public/index.php:2, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   3. Zend_Application->bootstrap() /var/www/nrka2/application/application.php:23, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   4. Zend_Application_Bootstrap_BootstrapAbstract->bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application.php:355, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   5. Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:583, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   6. Zend_Application_Bootstrap_BootstrapAbstract->_executeResource() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:619, referer: http://nrka2/css/main.css
    [Sun Jul 25 20:07:22 2010] [error] [client 127.0.0.1] PHP   7. Bootstrap->_initViewSettings() /var/www/Zend/ZendFramework-1.10.6/library/Zend/Application/Bootstrap/BootstrapAbstract.php:666, referer: http://nrka2/css/main.css
    

      <?php
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap{
        /**
         *
         * @var unknown_type
         */
        public $frontcontroller;
        /**
         *
         * @var unknown_type
         */
        protected $_logger;
        /**
         *
         * @var unknown_type
         */
        protected $_acl;
        /**
         *
         * @var unknown_type
         */
        protected $_auth;
    
        /**
         * Setup the logging
         */
        protected function _initLogging()
        {
            $this->bootstrap('frontController');
            $logger = new Zend_Log();
    
            $writer = 'production' == $this->getEnvironment() ?
            new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../data/logs/app.log') :
            new Zend_Log_Writer_Firebug();
            $logger->addWriter($writer);
    
            if ('production' == $this->getEnvironment()) {
                $filter = new Zend_Log_Filter_Priority(Zend_Log::CRIT);
                $logger->addFilter($filter);
            }
    
            $this->_logger = $logger;
            Zend_Registry::set('log', $logger);
        }
        protected function _initDefaultModuleAutoloader(){
            $this->_logger->info('Bootstrap '. __METHOD__);
    
            $this->_resourceLoader = new Zend_Application_Module_Autoloader(array(
                'namespace' =>  'EventManager',
                'basePath'  =>  APPLICATION_PATH . '/modules/eventManager',
            ));
    
            $this->_resourceLoader->addResourceTypes(array(
                    'modelResource' =>  array(
                    'path'          =>  'models/resources',
                    'namespace'     =>  'Resource',
            ),
                    'service'   => array(
                    'path'      =>  'services',
                    'namespace' =>  'Service'
                    ),
                    ));
        }
    
            // @todo develop this function
        protected function _initDbProfiler(){
    
            $this->_logger->info('Bootstrap ' . __METHOD__);
    
            if ('production' !== $this->getEnvironment()) {
                $this->bootstrap('db');
                $profiler = new Zend_Db_Profiler_Firebug('All DB Queries');
                $profiler->setEnabled(true);
                $this->getPluginResource('db')->getDbAdapter()->setProfiler($profiler);
            }
        }
    
        /**
         * Add Controller Action Helpers
         */
        protected function _initActionHelpers()
        {
            $this->_logger->info('Bootstrap ' . __METHOD__);
            Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_Acl());
            Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_RedirectCommon());
            Zend_Controller_Action_HelperBroker::addHelper(new SF_Controller_Helper_Service());
        }
        /**
         *
         * @return unknown_type
         */
        protected function _initRoutes(){
    
            $this->_logger->info('Initialize Routes '. __METHOD__);
            $this->bootstrap('frontController');
            $router = $this->frontController->getRouter();
    
            $route = new Zend_Controller_Router_route(
                'register',
            array(
                    'controller'    => 'user',
                    'action'        =>  'register'
                    )
                    );
                    $router->addRoute('register',$route);
    
                    $route = new Zend_Controller_Router_route(
                'login',
                    array(
                    'controller'    => 'user',
                    'action'        =>  'login'
                    )
                    );
                    $router->addRoute('login',$route);
                    $route = new Zend_Controller_Router_route(
                'logout',
                    array(
                    'controller'    => 'user',
                    'action'        =>  'logout'
                    )
                    );
                    $router->addRoute('logout',$route);
    
        }
        /**
         *
         * @return void
         */
        protected function _initLocale(){
    
            $this->_logger->info('Bootstrap '.__METHOD__);
            $locale = new Zend_Locale('nl_NL');
            Zend_Registry::set('Zend_Locale', $locale);
        }
    
        protected function _initAcl(){
            $this->_acl = new EventManager_Service_Acl();
        }
        /**
         *
         * @return void
         */
        protected function _initViewSettings(){
            $this->_logger->info('Bootstrap '.__METHOD__);
            $this->bootstrap('view');
            $this->bootstrap('Acl');
            $this->_view = $this->getResource('view');
    
            //set encoding and doctype
    
            $this->_view->setEncoding('UTF-8');
            $this->_view->doctype('XHTML1_STRICT');
            $this->_view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
            $this->_view->headMeta()->appendHttpEquiv('Content-Language', 'en-US');
    
            //@todo op een later moment moeten hier nog de stylesheets worden toegevoegd
            $this->_view->headLink()->appendStylesheet('/css/main.css');
            //$this->_view->headTitle('Event Manager');
            /*
            Set the head style.
            $this->_view->headTitle->headStyle();
            */
            $this->_view->headTitle()->setSeparator(' - ');
    
            $this->_auth = Zend_Auth::getInstance();    
    
            $navigation = new Zend_Config_Xml(APPLICATION_PATH.'/configs/navigation.xml','nav');
            $navContainer = new Zend_Navigation($navigation);
            $this->_view->navigation($navContainer)->setAcl($this->_acl)->setRole($this->_auth->getStorage()->read()->usr_role); //THIS IS LINE 169!!!!!!!!!
    
    
        }
    
        /**
         * Add graceful error handling to the dispatch, this will handle
         * errors during Front Controller dispatch.
         */
        public function run()
        {
    
            $errorHandling = $this->getOption('errorhandling');
            try {
                parent::run();
            } catch(Exception $e) {
                if (true == (bool) $errorHandling['graceful']) {
                    $this->__handleErrors($e, $errorHandling['email']);
                } else {
                    throw $e;
                }
            }
    
        }
    
        /**
         * Handle errors gracefully, this will work as long as the views,
         * and the Zend classes are available
         *
         * @param Exception $e
         * @param string $email
         */
        protected function __handleErrors(Exception $e, $email)
        {
            header('HTTP/1.1 500 Internal Server Error');
            $view = new Zend_View();
            $view->addScriptPath(dirname(__FILE__) . '/../views/scripts');
            echo $view->render('fatalError.phtml');
    
            if ('' != $email) {
                $mail = new Zend_Mail();
                $mail->setSubject('Fatal error in application Storefront');
                $mail->addTo($email);
                $mail->setBodyText(
                $e->getFile() . "\n" .
                $e->getMessage() . "\n" .
                $e->getTraceAsString() . "\n"
                );
                @$mail->send();
            }
        }
    }
    

    我试过调试我的代码,但在我对db做了一些事情之前,一切都很顺利。但我不知道db出了什么问题。我没有收到任何明确的错误信息。 有人能帮我吗?

    一些更有趣的数据:

       [bootstrap]
    
    resources.db.adapter = "PDO_MYSQL"
    resources.db.isdefaulttableadapter = true
    resources.db.params.dbname = "ladosa"
    resources.db.params.username = "root"
    resources.db.params.password = "root"
    resources.db.params.hostname = "localhost"
    resources.db.params.charset = "UTF8"
    resources.db.params.profiler.enabled = true
    resources.db.params.profiler.class = Zend_Db_Profiler_Firebug
    
    Autoloadernamespaces[] = "Zend_"
    Autoloadernamespaces[] = "SF_"
    
    phpsettings.display_errors  = 0
    phpsettings.error_reporting = 8191
    phpSettings.date.timezone   = "Europe/Amsterdam"
    
    bootstrap.path = APPLICATION_PATH"/bootstrap/Bootstrap.php"
    pluginPaths.resource_ = APPLICATION_PATH"/resources"
    
    
    resources.frontcontroller.moduledirectory = APPLICATION_PATH"/modules"
    resources.frontcontroller.defaultmodule = "eventManager"
    resources.frontcontroller.params.prefixDefaultModule = true
    resources.frontcontroller.exceptions = false
    
    resources.view[] = ""
    resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
    resources.view.encoding = "UTF-8"
    resources.view.title = Rode kruis Vrijwilligers applicatie
    ;resources.view.helperPath.Default_View_Helper = APPLICATION_PATH "/modules/eventManager/views/helpers"
    
    resources.layout.layout = "main"
    
    
    [production:bootstrap]
    
    [development:bootstrap]
    ;resources.frontController.throwExceptions = 1
    ;phpSettings.display_startup_errors=1
    ;phpSettings.display_errors = 1
    ;resources.frontcontroller.throwerrors =    
    
    [test:production]
    

    顺便说一句,我可以登录到我的数据库命令行与给定的用户名和密码。


    我认为我的apache日志没有提供任何相关信息。我把日志贴在上面了。

    有什么主意吗?

    1 回复  |  直到 15 年前
        1
  •  0
  •   grossvogel    16 年前

    我不熟悉Zend,所以这可能是在左外野。看看这一行,以及访问了哪些属性,很可能

    $this->_auth->getStorage()->read()
    

    不返回您想要的对象,因此 usr_role 无法访问属性。也许是为了测试 var_dump 就在第169行之前看看会发生什么。。。

    会不会是 getStorage 或 read

    推荐文章