在 Laravel 控制器中,我有几个方法都从获取数据库记录开始,然后在检查是否找到数据后继续渲染视图,或者在没有数据的情况下转到 404 页面。
这是一个例子:
<?php
function get_show_user($id)
{
$user = static::get_user($user_id);
if (!$user) {
return Response::error('404', static::$some_common_error404_message);
}
return View::make('users.show_readonly_user_data')->with('user', $user);
}
function get_edit_user($id)
{
$user = static::get_user($user_id);
if (!$user) {
return Response::error('404', static::$some_common_error404_message);
}
return View::make('users.display_edit_user_form')->with('user', $user);
}
我if (!$user)
在这些方法中重复整个声明,即使它们都做同样的事情。
我宁愿做这样的事情:
function get_show_user($id)
{
$user = Users::find($id);
static::go404_if_null($user);
return View::make('users.show_readonly_user_data')->with('user', $user);
}
function get_edit_user($id)
{
$user = Users::find($id);
static::go404_if_null($user);
return View::make('users.display_edit_user_form')->with('user', $user);
}
实现这种 DRY 功能的最佳方式是什么?
显然,一个简单return Response::error('404')
的方法在常见的存在检查器方法中不起作用,因为它只会从该方法返回。
似乎 anEvent::fire('404')
也不理想,因为它不会终止触发它的方法。
也许这里需要使用异常,但我不确定这一点,或者应该如何在 Laravel 中完成。我应该在哪里捕获控制器的 404 异常?