1

Zend フレームワークを使用しています。

現在のユーザー (ログインしている場合) が常にビューにアクセスできるようにします。私の Bootstrap.php ファイルには、現在次のものがあります。

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

そのため、この時点ではフレームワークによってデータベースがセットアップされていないようです。

Zend Framework で現在のユーザー オブジェクトを設定する簡単な方法があるはずですが、私にはわかりません。

4

3 に答える 3

2

ブートストラップでビューを初期化する前に DB を初期化するか、_initViewHelpers() を呼び出すときに DB アダプターを設定します。ただし、コントローラープラグインを使用します。

于 2010-01-09T18:14:42.190 に答える
0

私は単にユーザーを最も卑劣なデザインパターンであるシングルトンに入れ、いつでもどこでも好きなときにそれを呼び出します。

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

また

$User=bl_User::getInstance();bl_User::getInstance()
$User->user_id;
$User->user_name;
于 2010-01-09T17:30:36.703 に答える
0

最終的に、Bootstrap に 2 つのメソッドを追加しました。

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');

in _initViewHelpers()

于 2010-01-10T00:44:37.370 に答える