通过请求Laravel传递ID

时间:2016-09-23 02:54:41

标签: laravel

我想要的是传递已登录的用户ID

ArticleRequest.php      

    namespace App\Http\Requests;

    use App\Http\Requests\Request;

    class ArticleRequest extends Request {

        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize() {
            return true;
        }

        //validation rules
        public function rules() {
            return [
                'title' => 'required|min:5',
                'content' => 'required',
                'user_id' => 'required|numeric',
                'category_id' => 'required|numeric',
                'published_at' => 'required|date',
    //            'image'=>'required|image|mimes:png,jpg,jpeg,gif,bmp'
            ];
        }
        //custom message
        public function messages() {
            return [
                'title.required' => 'A title is required',
                'content.required' => 'Write a content',
                'category_id.required' => 'Pick a Category',
    //            'image.required' => 'Image should be png,jpg,jpeg,gif,bmp in format'
            ];
        }

    }

ArticleController.php

  //storing articles
    public function store(ArticleRequest $request) {
        $id = \Auth::id();
        $request['user_id'] = $id;
        Article::create($request->all());
        flash()->overlay("Your Post has been added!", 'Congratulations');
        return redirect('article');
    }

以上代码不起作用我不知道。我只是在试验它。但它仍然无法奏效。我想将当前登录用户的id传递给user_id列。

4 个答案:

答案 0 :(得分:2)

user_id与请求参数结合起来:

Article::create(['user_id' => \Auth::user()->id] + $request->all());

或者如果您已建立关系:

Auth::user()->articles()->create($request->all());

答案 1 :(得分:0)

ArtileRequest的类型为FormRequest,您不能像这样添加值。

这是一个可能适合您的代码示例:

    //storing articles
    public function store(ArticleRequest $request) {
        $input = $request->all();
        $input['user_id'] = \Auth::user()->id();
        Article::create($input);
        flash()->overlay("Your Post has been added!", 'Congratulations');
        return redirect('article');
    }

答案 2 :(得分:0)

我认为您不应该在控制器中编写应用程序逻辑,这会使您在应用程序的其他部分编写相同的代码段,从而导致代码重复。

解决方案

我还需要告诉你,这不是最好的方法,但它应该可以做到并且很干净。

user.php的

public function articles()
{
    return $this->hasMany(Article::class);
}

public function publishArticle(Article $article)
{
    return $this->articles()->save($article);
}

ArticleController.php

public function store(ArticleRequest $request)
{
    $request->user()->publishArticle(new Article($request->all()));

    ...
}

请记住,您也可以通过请求访问用户。

/**
 * Get the user making the request.
 */
$user = $request->user();

答案 3 :(得分:0)

您的ArticleRequest表单请求对象提供的验证在调用控制器方法之前完成。因此,在控制器中添加的代码无关紧要,在验证发生之前,您将无法修改表单请求对象中的数据。

如果user_id未通过请求数据进入,则需要将其从表单请求对象中的规则中删除。