【问题标题】:CakePHP - can't get session variable in viewCakePHP - 无法在视图中获取会话变量
【发布时间】:2012-12-16 14:24:55
【问题描述】:

在 ProjectsController.php 中,我设置了一个会话变量,因为我希望所有控制器、模型和视图都可以访问该信息:

$this->Session->write('Project.title', $this->Project->title);

现在,当我尝试从“项目”视图访问它时,如下所示:

        <p>Project: <strong>
        <?php if (isset($session->read('Project.title'))): 
            $session->read('Project.title');
        ?>
        <?php else: ?>
            Not selected
        <?php endif; ?>
        </strong></p>       

我收到以下错误:

Fatal error: Can't use method return value in write context 

上面代码的第二行。

我浏览过 CakePHP 文档,也搜索过 SO,我在这里做错了什么?

谢谢!

编辑:

我也尝试过使用:

$this->Session->read('Project.title')

导致相同的错误消息。

【问题讨论】:

    标签: php session cakephp


    【解决方案1】:

    你应该按照 PHP 偶尔告诉你的去做 :) 错误信息非常清楚。您不能以这种方式使用 isset() 和 empty()。 它们只直接使用变量,而不是方法。所以使用

    <?php if ($this->Session->check('Project.title')) {
        echo $this->Session->read('Project.title');
    } ?>
    

    如食谱中所述

    你也可以

    <?php
    $title = $this->Session->read('Project.title');
    if ($title) {
        echo $title;
    } ?>
    

    甚至

    <?php if ($title = $this->Session->read('Project.title')) {
        echo $title;
    } ?>
    

    不过,最后一个不是 cakephp 编码约定。

    【讨论】:

    • 是的,马克,我一定要听一下:)这解决了,谢谢。
    • 有关 CakePHP 3.x 解决方案,请参阅 stackoverflow.com/a/32668870
    【解决方案2】:

    isset() 无法处理这样的功能。存储该$session 对象的read() 函数的返回值,然后if() 条件内测试该变量:

    $title = $session->read('Project.title');
    echo ($title) ? $title : '';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2018-01-07
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多