2016-11-28 9 views
0

1)idが設定されていないか、idが間違っているときにエラーを発生させたい。 2)idが設定されているがデータベースにないときにエラーを発生させたい。 私は間違ったIDを入れたときに何も表示されませんか?私はエラーメッセージを表示することを期待しました。cakephp何も表示されない

ItemController.php:テンプレートから

<?php 
/** 
* Created by PhpStorm. 
* User: Marian39 
* Date: 11/17/2016 
* Time: 8:07 PM 
*/ 

namespace App\Controller; 

use Cake\Network\Exception\NotFoundException; 
use Cake\Datasource\Exception\RecordNotFoundException; 

class ItemsController extends AppController 
{ 
    public function view($id = null) 
    { 
     if(!$id) 
     { 
      throw new NotFoundException(__("id is not set or wrong")); 
     } 

     $data= $this->Items->findById($id); 

     $display = $this->Items->get($id); 



try { 
      $display= $this->Items->get($id); 
    } 
catch (RecordNotFoundException $e) { 
    //no code need 
      } 


     $this->set('items', $data); 

     $this->set('error', $display); 
    } 

    public function index() 
    { 
     $data = $this->Items->find('all', array('order'=>'year')); 
     $count = $this->Items->find()->count(); 
     $info = array('items'=>$data, 
         'count' => $count); 
     $this->set($info); 
     // $this->set('items', $data); 
     // $this->set('count', $count); 

     //this->set('color', 'blue'); 
    } 

} 
?> 

view.ctp:

<?php foreach($items as $item): ?> 

<div> 
    <h2> 
     <?php echo h($item['title']);?> 
     <?php echo h($item['year']);?> 
    </h2> 
    <p> 
     Length: <?php echo h($item['length']);?> 
    </p> 
    <div> 
     <?php echo h($item['description']);?> 
    </div> 
</div> 

<?php endforeach; ?> 

答えて

1

強化された例外処理のために、あなたの代わりにfindByIdのget()を使用する必要があります()。チェックするために

If the get operation does not find any results a Cake\Datasource\Exception\RecordNotFoundException will be raised.

You can either catch this exception yourself, or allow CakePHP to convert it into a 404 error.

それが有効なレコードだ場合、あなたはトップでこれを言及する必要があります。

namespace App\Controller; 

use Cake\Network\Exception\NotFoundException; 
use Cake\Datasource\Exception\RecordNotFoundException; 

public function view($id = null) 
{ 
    /* Other code*/ 
    try { 
     $data= $this->Items->get($id); 
    } catch (RecordNotFoundException $e) { 
     // Show appropriate user-friendly message 
    } 
} 
+0

こんにちは!コードをクラスの上に置きます。エラー:オブジェクトコンテキストにないときに$ thisを使用しますか? どのような変更を具体的に行う必要がありますか?私はあまりにもよく理解していませんでした。私は初心者です。 –

+0

次の行を置くべきです: 'use Cake \ Datasource \ Exception \ RecordNotFoundException;クラスが開始する前に ' ' 'public function index()'の中にtry catchブロックを置いてください –

+0

助けてくれてありがとう!私は自分のコードを修正しました。これはこのようにしか動作しません。もし大丈夫なら教えてください。 –

関連する問題