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)
错误表明$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)
| 归档时间: |
|
| 查看次数: |
48377 次 |
| 最近记录: |