如何将变量传递给phalconphp中的主视图

时间:2014-06-27 12:38:02

标签: php phalcon

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

事实上,我希望在所有视图中共享一段数据。我怎么能在phalcon中做到这一点。

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

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

3 个答案:

答案 0 :(得分:4)

使用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>

您将在绿色背景上看到文字“世界”。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

我认为最好是创建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;
    }
}