如何在CakePHP模型中设置变量并在视图中访问它?

时间:2015-02-05 21:16:49

标签: cakephp

我有多个模型要添加变量$section,然后在sidenav.ctp中使用该值动态更改侧边栏。例如,我的模型是:

class Resource extends AppModel {
    public $section = 'section1';
    public $displayField = 'name';
    public $order = 'modified DESC';

    //validation, relationships, etc.
}

然后我有另一个模型:

class Topic extends AppModel {
    public $section = 'section2';
    public $tablePrefix = '';

    //validation, relationships, etc.
}

所以在sidenav.ctp中,我想做类似的事情:

<?php if ($this->section == 'section1') { ?>
    <li><?php echo $this->Html->link(__('Resources'), array('controller' => 'resources', 'action' => 'index')); ?></li>
    <li><?php echo $this->Html->link(__('Topics'), array('controller' => 'topics', 'action' => 'index')); ?> </li>
    <li><?php echo $this->Html->link(__('Log Out'), array('controller' => 'users', 'action' => 'logout')); ?> </li>
<?php } ?>

<?php if ($this->section == 'section2') { ?>
    <li><?php echo $this->Html->link(__('Resources1'), array('controller' => 'resources', 'action' => 'index')); ?></li>
    <li><?php echo $this->Html->link(__('Topics1'), array('controller' => 'topics', 'action' => 'index')); ?> </li>
    <li><?php echo $this->Html->link(__('Log Out1'), array('controller' => 'users', 'action' => 'logout')); ?> </li>
<?php } ?>

但以这种方式访问​​$section不起作用。我无法弄清楚如何在模型中设置值,然后在视图中访问它。我知道我可以在Controller中设置值,然后只需$section来访问它,但这需要我把它放在每个函数中。

3 个答案:

答案 0 :(得分:1)

尝试查看文件$this->name == 'ModelName'

就像这个例子:

<li <?php if($this->name == 'Users'){?> class="active" <?php } ?> >
            <a href="<?php echo $this -> Html -> url(array('plugin' => false, 'controller' => 'pages', 'action' => 'dashboard')); ?>">
                <i class="fa fa-dashboard"></i>
                <span><?php echo __('Dashboard', true); ?></span>
                <span class="label label-warning pull-right">1</span>
            </a>
        </li>

OR

在您的控制器beforeFilter或beforeRender方法中

//access variable from  model
$this->set('sections',$this->User->section);

//or set direct     
$this->set('sections','section1');

答案 1 :(得分:0)

视图/元素可以由任何控制器调用和呈现,因此除非您将它从模型传递到视图,否则它们不会自动知道您希望它引用哪些数据。 你可以做的最近的任何用途都不是回应路由器模型方法,但结果取决于你所在的网址。

答案 2 :(得分:0)

您可以保存定义全局变量

Configure::write('my_var','this is model variable');

在您的视图文件中访问此变量,如下所示

echo Configure::read('my_var');