调用空 Laravel 5.2 上的成员函数

Nav*_*mar 0 php laravel laravel-5.2

我正在创建更像 Facebook 帖子的内容,我从用户那里收到一个帖子并将其存储到数据库中。我创建了两个模型User 和 Post

这是用户模型的代码

    <?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;

class User extends Eloquent implements Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];


    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 Post 模型的代码

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function user()

    {

        return $this->belongsTo('App\User');
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个 postController,这是它的代码

    use App\Post;

use App\Http\Requests;
use Illuminate\Http\Request;
use DB;
use Illuminate\Contracts\Auth\User;
use App\Http\Controllers\Controller;

class PostController extends Controller
{

    public function createPost(Request $request)
    {

        $post = new Post();

        $post->userpost = $request['userpost'];
        $request->user()->posts()->save($post);  -> **Error here Call to a member function posts() on null**
        return redirect()->back();

    }}
Run Code Online (Sandbox Code Playgroud)

MrC*_*ode 5

错误表明$request->user()返回null,这意味着用户未登录到应用程序 - 即是访客。$request->user()如果用户经过身份验证,该方法将仅返回用户。

文档

用户通过身份验证后,您可以通过 Illuminate\Http\Request 实例访问经过身份验证的用户

解决方案是将您的代码包装在如下所示的身份验证检查中,或者使用中间件来阻止访问此路由,除非用户通过身份验证。

if(\Auth::check()){
    $post = new Post();

    $post->userpost = $request['userpost'];
    $request->user()->posts()->save($post);
} else {
    // not logged in - do something
}
Run Code Online (Sandbox Code Playgroud)