我想存储数据,例如。用户名和姓氏以多种布局显示它们。 我想在一个控制器中设置一些变量并在布局中使用它。
任何解决方案?
我创建了一些类似的布局:
<span id="STATUS">LOGGED: <span id="USERNAME"><?php echo $this->name. ' ' . $this->surname; ?></span>
但首先,在控制器的某些操作中,我从数据库中获取名称和姓氏:
$db = $this->getServiceLocator()->get('MyDatabase');
$sql = 'SELECT * FROM Users';
$statement = $db->query($sql);/
$result = $statement->execute();
然后我在控制器中设置静态变量:
self::$name = $result['name'];
self::$surname = $result['surname'];
接下来在操作中我改变布局并将变量传递给它:
$this->layout('layout/student');
$this->layout()->name = self::$name;
$this->layout()->surname = self::$surname;
但我不希望从每个控制器的数据库中获取数据,并在每个操作中传递变量。
答案 0 :(得分:0)
好的,我的解决方案就是这个。
在你的module.php里面
public function onBootstrap(MvcEvent $e)
{
$sharedEvents = $e->getApplication()->getEventManager()->getSharedManager();
$sharedEvents->attach(__NAMESPACE__, 'dispatch', function($e) {
//This event will only be fired when an ActionController under the MyModule namespace is dispatched.
$controller = $e->getTarget();
//to be able to view actions and controllers
$params = $e->getApplication()->getMvcEvent()->getRouteMatch()->getParams();
$nameSurnameArray = $controller->getServiceLocator()->get('NAMEOFTABLEWITHSQL')->getNameSurname();
if($params['action'] == 'test'){
$controller->layout('layout/testlayout');
$controller->layout()->name = $nameSurnameArray['name'];
$controller->layout()->surname = $nameSurnameArray['surname']';
}
}, 100);
$eventManager = $e->getApplication()->getEventManager();
$serviceManager = $e->getApplication()->getServiceManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
$this->bootstrapSession($e);
}
因此,如果路由是Action测试,则加载testLayout,并将我从数据库获取的名称和姓氏传递给该布局。同样,如果一个控制器具有相同的布局,则可以指定控制器($ params [&#39; controller&#39;] ==&#39; testModule \ Controller \ testController&#39;)而不是操作。
我猜这个解决方案可以改进,但希望它会指向正确的方向