如何将变量传递到主视图,而不仅仅是控制器的视图。如何将变量传递给phalconphp中的主视图
实际上我想分享所有视图中的一段数据。我怎么能在phalcon中做到这一点。
例如,在Laravel,我可以使用:
View::share('variable', $value);
如何将变量传递到主视图,而不仅仅是控制器的视图。如何将变量传递给phalconphp中的主视图
实际上我想分享所有视图中的一段数据。我怎么能在phalcon中做到这一点。
例如,在Laravel,我可以使用:
View::share('variable', $value);
你可以创建一个服务 - 如果这是简单的变量,它将是一个矫枉过正,但它会工作。
<?php
// In your bootstrap file
$di->setShared('variable', 41);
?>
然后,在任何视图(或控制器或任何DI注射)将是缴费作为$this->variable
。即:
// some view
<?php echo $this->variable; ?>
// or using volt
{{ variable }}
变量当然可以是一个对象。就个人而言,我使用配置对象这样简单的变量,即:{{ config.facebook.fbId }}
。
随着尔康,你不需要任何额外的功能,将数据传递到布局。在动作分配的所有变量的布局可自动:
控制器:
class IndexController extends \Phalcon\Mvc\Controller
{
public function indexAction()
{
$this->view->bg = 'green';
$this->view->hello = 'world';
}
}
主要布局:
<html>
<body style="background: <?php echo $bg ?>">
<?php echo $this->getContent(); ?>
</body>
</html>
行动的看法:
<div>
<?php echo $hello ?>
</div>
您将在绿色背景上看到文字“世界”。
这相当于'$这 - >查看 - > SETVAR(“X”,$ x)的;'。这只为当前视图设置x,我希望在所有视图中都有变量,它与任何控制器都没有关系。 – Pars
我认为更好的是创建BaseController - 每个父级控制器扩展。然后使用事件添加共享数据中的每个动作的执行后,以查看:
<?php
class ControllerBase extends \Phalcon\Mvc\Controller
{
protected $_sharedData = [];
public function initialize()
{
// set shared data for all actions
this->_sharedData = [
'sharedVar' = 1,
'overrideMe' = false
];
}
public function afterExecuteRoute($dispatcher)
{
// Executed after every found action
$this->view->setVar('sharedData', $this->_sharedData);
}
}
在子控制器
<?php
class IndexController extends ControllerBase
{
public function initialize()
{
parent::initialize();
// override shared variable for all Index actions
$this->_sharedData['overrideMe'] = true;
}
public function homeAction()
{
// add custom variable to shared data
$this->_sharedData['customVar'] = -1;
}
}
这是一个很好的答案,但有一个语法错误。要在PhalconPHP中创建服务,第二个参数必须是这样的函数: $ di-> setShared('variable',function(){ return 41; }); –