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; ?>
答案 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
}
}