2

在 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')

导致相同的错误消息。

4

2 回答 2

6

你应该做 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 编码约定。

于 2012-12-16T14:27:09.320 回答
0

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

$title = $session->read('Project.title');
echo ($title) ? $title : '';
于 2012-12-16T14:27:18.453 回答