代码之家  ›  专栏  ›  技术社区  ›  Matt McCormick

如何在视图中设置当前用户?

  •  1
  • Matt McCormick  · 技术社区  · 16 年前

    function _initViewHelpers()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();
    
                // <snip> $view-> set some stuff
    
        $view->identity = Zend_Auth::getInstance()->getIdentity();
    }
    

    我的index.php文件如下所示:

    require_once 'Zend/Application.php';  
    
    // Create application, bootstrap, and run
    $application = new Zend_Application(APPLICATION_ENV, 
        APPLICATION_PATH . '/configs/application.ini');
    
    $application->bootstrap();
    
    $tblUser = new Model_DbTable_User();
    Zend_Registry::set('user', $tblUser->getUser());
    
    $application->run();
    

    我希望引导是这样的:

    function _initViewHelpers()
    {
        $this->bootstrap('layout');
        $layout = $this->getResource('layout');
        $view = $layout->getView();
    
        $tblUser = new Model_DbTable_User();
        $user = $tblUser->getUser();
        Zend_Registry::set('user', $user);
    
        $view->user= $user;
    }
    

    Fatal error:  Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for Model_DbTable_User' in /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Db/Table/Abstract.php:754
    Stack trace:
    #0 /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Db/Table/Abstract.php(739): Zend_Db_Table_Abstract-&gt;_setupDatabaseAdapter()
    #1 /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Db/Table/Abstract.php(268): Zend_Db_Table_Abstract-&gt;_setup()
    #2 /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Db/Table.php(77): Zend_Db_Table_Abstract-&gt;__construct(Array)
    #3 /var/www/application/Bootstrap.php(25): Zend_Db_Table-&gt;__construct()
    #4 /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Application/Bootstrap/BootstrapAbstract.php(662): Bootstrap-&gt;_initViewHelpers()
    #5 /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Application/Bootstrap/BootstrapAbstract.php(615): Zend_Application_Bootstrap_BootstrapAbstract-&gt;_executeResource('viewhelpers')
    #6 /usr/local/php/ZendFramework-1.9.5- in /usr/local/php/ZendFramework-1.9.5-minimal/library/Zend/Db/Table/Abstract.php on line 754
    

    因此,目前看来该框架尚未设置数据库。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Gordon Haim Evgi    16 年前

    只需在引导中初始化视图之前初始化DB,或者在调用_initViewHelpers()时设置DB适配器。我会使用 Controller Plugin 不过。

        2
  •  0
  •   Itay Moav -Malimovka    16 年前

    bl_User::getInstance()->user_id;
    bl_User::getInstance()->user_name;
    

    $User=bl_User::getInstance();bl_User::getInstance()
    $User->user_id;
    $User->user_name;
    
        3
  •  0
  •   Matt McCormick    16 年前

    最后,我向引导添加了两种方法:

    function _initDatabase()
    {
        $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 
            APPLICATION_ENV);
        $db = Zend_Db::factory($config->resources->db->adapter, 
            $config->resources->db->params);
        Zend_Registry::set('db', $db);
    }
    
    function _initUser()
    {
        $tblUser = new Model_DbTable_User(array('db' => Zend_Registry::get('db')));
        $user = $tblUser->getUser();
        Zend_Registry::set('user', $user);
    }
    

    那么我就这样做:

    $view->user = Zend_Registry::get('user');
    

    推荐文章