2014-06-27 41 views
3

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

实际上我想分享所有视图中的一段数据。我怎么能在phalcon中做到这一点。

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

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

回答

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

+1

这是一个很好的答案,但有一个语法错误。要在PhalconPHP中创建服务,第二个参数必须是这样的函数: $ di-> setShared('variable',function(){ return 41; }); –

4

随着尔康,你不需要任何额外的功能,将数据传递到布局。在动作分配的所有变量的布局可自动:

控制器:

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> 

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

+0

这相当于'$这 - >查看 - > SETVAR(“X”,$ x)的;'。这只为当前视图设置x,我希望在所有视图中都有变量,它与任何控制器都没有关系。 – Pars

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; 
    } 
} 
相关问题