将数据库值传递给布局

时间:2014-07-01 07:55:49

标签: php zend-framework2

在我的Zend应用程序中,有一个在多个模块中使用的布局文件。现在我需要从数据库(表网关)检索数据并在布局上显示。然后它应该出现在所有模块中。

我如何实现这一目标?

enter image description here

前 -

<?php echo $user_name; ?>

$ user_name的值应从数据库中获取并传递给布局文件。

3 个答案:

答案 0 :(得分:1)

你不必在每个控制器中设置它。您可以将它附加到module.php中的布局变量。

public function onBootstrap(MvcEvent $e)
{
    $sm = $e->getApplication()->getServiceManager();
    $tableWhatever = $sm->get('tableWhatever');
    $viewModel = $e->getApplication()->getMvcEvent()->getViewModel();
    $viewModel->userName = $tableWhatever->getUserName();
}

根据zf2版本的不同,您可能需要访问布局中的变量,如下所示:

$this->layout()->userName;

您还可以扩展AbstractActionController并添加布局变量。我通常只是使用快速onBootstrap方法。

答案 1 :(得分:0)

我相信,在Zend中,你的控制器会想要:

$this->view->assign('variableName', 'variableValue');

在你看来,你会想要:

$this->variableName;

答案 2 :(得分:0)

您可以使用Zend Plugin来实现类似的目标,例如:

class MyPlugin extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
      // Get instance
      $layout = Zend_Layout::getMvcInstance();
      $view = $layout->getView();

      $view->user_name = 'your_username';
    }
}

并在frontController中注册你的插件:

Zend_Controller_Front::getInstance()->registerPlugin(new MyPlugin());

然后在布局中,您可以这样做:

<?php echo $this->user_name; ?>