加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 如何检查许多控制器方法正在使用的对象的存在DRY和Larave

发布时间:2020-12-14 19:38:36 所属栏目:大数据 来源:网络整理
导读:在Laravel控制器中,我有几种方法都是从获取数据库记录开始,然后在检查是否已经找到数据之后通过渲染视图继续,或者,如果没有数据,则转到404页面. 这是一个例子: ?phpfunction get_show_user($id){ $user = static::get_user($user_id); if (!$user) { return
在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功能的最佳方法是什么?

显然,简单的返回Response :: error(‘404’)在公共存在检查器方法中不起作用,因为它只会从该方法返回.

看起来Event :: fire(‘404’)并不理想,因为它不会终止它被触发的方法.

也许这里需要使用例外,但我不确定这一点,或者如何在Laravel中完成.我应该在哪里捕获404控制器异常?

解决方法

我认为解决这个问题的最佳方法是在控制器上使用之前的过滤器.

public static $require_user = array(
    'edit_user','show_user',);

public function before()
{
    $route = Request::route();
    if ( in_array( $route->controller_action,static::$require_user ) )
    {
        $this->user = User::find( $route->parameters[0] );
        if ( is_null($this->user) ) return Response::error('404');
    }
}

在构造控制器之后但在调用方法之前调用过滤器之前.如果before过滤器返回除null之外的任何内容,则不调用该方法,因此停止执行.

这里我们获取当前正在执行的路由,以便我们可以检查要对我们的数组$require_user调用哪个方法.这使我们可以使用不需要用户ID的方法,例如登录.

然后我们检索用户实例,从传递给方法的内容中获取id.你应该在这里添加更多的错误处理.

最后,我们检查用户返回的是否为null,表示未找到.如果是这种情况,我们返回404响应,停止执行该方法.

我希望这有帮助!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读