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 

これは、上記のコードの2行目を参照しています。

私は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;
} ?>

ただし、最後の1つは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 に答える