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

How do I set a variable in a CakePHP model and access it in a view?

我有多个模型,我想将变量 $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 是行不通的。我不知道如何在模型中设置值,然后在视图中访问它。我知道我可以在控制器中设置值,然后仅通过 $section 访问它,但这需要我将它放入每个函数中。

在您的视图文件中尝试 $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>

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

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

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

视图/元素可以由任何控制器调用和呈现,因此它们不会自动知道您希望它引用什么数据,除非您将它从模型传递到视图。 您可以做的最近但没有任何用处的是回显路由器模型方法,但结果取决于您所在的url。

你可以保存定义全局变量

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

在您的视图文件中像这样访问这个变量

echo Configure::read('my_var');