Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中将变量传递给主视图_Php_Phalcon - Fatal编程技术网

如何在PHP中将变量传递给主视图

如何在PHP中将变量传递给主视图,php,phalcon,Php,Phalcon,如何将变量传递给主视图,而不仅仅是控制器的视图 事实上,我想在所有视图中共享一段数据。我怎样才能在法尔孔做到这一点 例如,在Laravel中,我可以使用: View::share('variable',$value)使用Phalcon,您不需要任何附加功能将数据传递到布局中。动作中指定的所有变量在布局中自动可用: 控制器: class IndexController extends \Phalcon\Mvc\Controller { public function indexAction

如何将变量传递给主视图,而不仅仅是控制器的视图

事实上,我想在所有视图中共享一段数据。我怎样才能在法尔孔做到这一点

例如,在Laravel中,我可以使用:


View::share('variable',$value)

使用Phalcon,您不需要任何附加功能将数据传递到布局中。动作中指定的所有变量在布局中自动可用:

控制器:

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>
主布局:

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>


您可以为此创建一个服务-如果这是一个简单的变量,这将是一个过度的杀伤力,但它会工作

<?php 
    // In your bootstrap file
    $di->setShared('variable', 41);
?>

变量当然可以是一个对象。就我个人而言,对于这些简单的变量,我正在使用config对象,即:
{{{config.facebook.fbId}}

我认为最好是创建BaseController-parent controller everyone扩展。然后在执行每个操作后,使用事件添加要查看的共享数据:

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

这相当于
$this->view->setVar('x',$x)。这只为当前视图设置了x,我希望在所有视图中都有变量,它与任何控制器都不相关。这是一个很好的答案,但有一个语法错误。要在PhalconPHP中创建服务,第二个参数必须是一个函数,如下所示:$di->setShared('variable',function(){return 41;});