【问题标题】:Laravel - message: "Trying to get property 'first_name' of non-object", exception: "ErrorException"Laravel - 消息:“试图获取非对象的属性 'first_name'”,异常:“ErrorException”
【发布时间】:2019-10-27 22:45:21
【问题描述】:

我正在开发一个使用 Laravel-5.8 作为后端的 Web 应用程序。我有一个发布请求,如下所示:

    public function storeClientQuote(Request $request)
    {
        $user = Auth::user();
        $userFirstName = Auth::user()->first_name;
        $userLastName = Auth::user()->last_name;
        $userEmail = Auth::user()->email;

        $dashboardowner = Client::join("users","users.client_id","=","clients.client_id")
                            ->select("clients.client_name", "users.id", "users.first_name", "clients.address1", "clients.address2")
                            ->where('users.id', $user->id) 
                            ->get();  

        if(!Auth::user()->hasPermissionTo('Add Quote'))
            return response()->json([ "message" => 'User do not have permission'], 401);
        $request->validate([
            'phone' => 'required|max:14',
          //  'business_name' => 'string',
            'truck_type' => 'required',
            'truck_required' => 'required',
            'quote_origin' => 'required',
            'quote_destination' => 'required',
            'commodity' => 'required',  
            'loading_date' => 'date|required' 
        ]);
        $clientquote = new ClientQuote;
        $clientquote->first_name= $userFirstName;
        $clientquote->last_name=$userLastName;
        $clientquote->email=$userEmail;
        $clientquote->phone=$request->get('phone');
        $clientquote->business_name= $dashboardowner[0]->client_name;
        $clientquote->address= $dashboardowner[0]->address1 . " " . $dashboardowner[0]->address2;
        $clientquote->truck_type=$request->get('truck_type');
        $clientquote->truck_required=$request->get('truck_required');
        $clientquote->quote_origin=$request->get('quote_origin');
        $clientquote->quote_destination=$request->get('quote_destination');
        $clientquote->commodity=$request->get('commodity');
        $loading_date=date_create($request->get('loading_date'));
        $format = date_format($loading_date,"Y-m-d H:i:s");
        $clientquote->loading_date = $format;
        $clientquote->save();


        return response()->json([
            'message' => 'Quote Successfully Sent!'
        ], 201);
    }

当我尝试调试时,发现错误开始于:

$userFirstName = Auth::user()->first_name;

与消息:

消息:“尝试获取非对象的属性 'first_name'”,异常:“ErrorException”

我该如何解决?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    该消息表示 Auth::user() 返回 null,如果没有登录用户,通常会发生这种情况。在尝试访问Auth::user() 的属性之前,首先检查用户是否使用Auth::check() 登录

    如果该控制器方法仅用于或登录用户,您可以在调用控制器方法的路由上设置 Auth Middleware。

    如果整个控制器应该只有登录用户可以访问,请在控制器构造方法中设置身份验证中间件。

    这样,您始终可以确定登录用户是可访问的,即 Auth::user() 将是一个对象

    【讨论】:

      【解决方案2】:

      试试这个

      $user = auth()->user();
      $userFirstName = $user->first_name;
      

      【讨论】:

      • 这将返回与用户遇到的相同的错误。如果没有登录用户,auth()->user() 将返回 null,就像 \Auth::user()`
      • 你是对的,我假设请求用户已登录。
      猜你喜欢
      • 1970-01-01
      • 2017-08-02
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2015-09-17
      • 2020-09-30
      相关资源
      最近更新 更多