cakephp NotFoundException不显示任何内容

时间:2016-11-28 18:26:47

标签: php cakephp

1)我想在未设置id或id错误时抛出错误。 2)我想在设置id但是不在数据库中时抛出错误。 当我输错ID时,为什么不给我任何东西?我希望显示错误消息。

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 个答案:

答案 0 :(得分:3)

对于增强的异常处理,您应该使用get()而不是findById()。

  

如果get操作没有找到任何结果,将引发 Cake \ Datasource \ Exception \ RecordNotFoundException

     

您可以自己捕获此异常,或允许CakePHP将其转换为404错误。

为了检查它是否是有效记录,您需要在顶部提及:

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
    }
}