1

私はcakephpの初心者です..実際には2つの問題があります..最初の1つは、default.ctpで使用するためにAppControllerで変数を設定していることです。

public function beforeRender(){

    $id = $this->Auth->user('idUser');

    $this->loadModel('Userinfo');
    $data= $this->Userinfo->find('all',array(
        'conditions' => array('Userinfo.User_id' => $id)
    ));

    foreach($data as $d){
        $product_purchase = $d['Userinfo']['product_purchase'];
    }

    $this->set('userinfo',$product_purchase);
}

そのため、変数をdefault.ctpレイアウトに使用すると正常に動作します..しかし、問題は、アプリからログアウトすると、ログインページにこのエラーが表示されることです

未定義変数: product_purchase

私は何を間違っていますか?ちなみにここで言いたいのは、私のログインページでは default.ctp をうまく使っていないということです。これは dat とは何の関係もないと思います

2番目の問題は、特定のユーザーに特定のメニュー項目を表示したいということです...だから私は自分のビューページでこれをやっています

<?php if ($userinfo == 1){ ?> 
  <li><a href="explorer.html" class="shortcut-medias" title="Media">Media</a> </li>
<?php }else{ //nothing }?>

userinfo の値は 2 です

4

1 に答える 1

1

変数product_purchaseが初期化されていません

前の検索呼び出しの結果がない場合、変数$product_purchaseは定義されず、未定義変数エラーがトリガーされます。ログインしているユーザーがいない場合は、次のようになります。

public function beforeRender(){

    // will be null if there is no user
    $id = $this->Auth->user('idUser');

    // unnecessary find call if there is no user, returning no rows
    $this->loadModel('Userinfo');
    $data= $this->Userinfo->find('all',array(
        'conditions' => array('Userinfo.User_id' => $id)
    ));

    // will not enter this foreach loop as data is empty
    foreach($data as $d){
        $product_purchase = $d['Userinfo']['product_purchase'];
    }

    // $product_purchase is undefined.
    $this->set('userinfo',$product_purchase);
}

問題のコードについては、以前に変数を初期化するだけです。

public function beforeRender(){
    $product_purchase = null;

$producut_purchase が上書きされる可能性があります

このクエリで返されるデータ行が複数ある場合は、次の点に注意してください。

foreach($data as $d){
    $product_purchase = $d['Userinfo']['product_purchase'];
}

変数には、最後の行の$product_purchase値のみが含まれます。

結果が 1 つしかない場合は、適切な方法を使用してください。使用しないでくださいfind('all')- を使用してくださいfind('first')。または、1 つのフィールドのみが取得されているという事実を考慮して、次のfieldメソッドを直接使用します。

$product_purchase = $this->Userinfo->field(
    'product_purchase', 
    array('Userinfo.User_id' => $id))
);
于 2013-06-19T21:01:13.420 に答える