Php 将数据库值传递给布局

Php 将数据库值传递给布局,php,zend-framework2,Php,Zend Framework2,在我的Zend应用程序中,有一个用于多个模块的布局文件。现在我需要从数据库(表网关)中检索数据并显示在布局上。然后它应该出现在所有模块中 我如何做到这一点 前- $user\u name的值应从数据库中获取并传递到布局文件。我相信,在Zend中,您的控制器将需要: $this->view->assign('variableName','variableValue') 在您看来,您需要: $this->variableName您可以使用来实现类似的功能,例如: class MyPlugin

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

我如何做到这一点

前-



$user\u name的值应从数据库中获取并传递到布局文件。

我相信,在Zend中,您的控制器将需要:

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

在您看来,您需要:

$this->variableName

您可以使用来实现类似的功能,例如:

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; ?>

您不必在每个控制器中都设置它。您可以将其附加到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
,并通过它添加布局变量。不过,我通常只使用快速启动方法。

这是针对Zend 1还是Zend 2的?@ChamingaD查看Zend Framework 2的更新答案我是否必须在每个模块控制器中添加此选项?是的。每个控制器通常都有一个关联的布局,并且该控制器负责收集传递到其布局的数据。控制器中的上述行非常轻量级,可以跨多个控制器放置。
$this->layout()->userName;