【问题标题】:How can I update a post in laravel using formData?如何使用 formData 更新 laravel 中的帖子?
【发布时间】:2020-07-04 03:19:25
【问题描述】:

所以我在一个社交网络中工作,我希望在完成帖子后能够对其进行编辑,但我遇到了错误:

message: "This action is unauthorized."

对我来说似乎很简单,我得到了组件中的信息,通过 axios 调用发送它,该调用通过我定义的路由,它只是转到控制器并从那里到服务,但我一定错过了我不知道它是什么东西。任何提示都非常感谢,因为我有点生气......

这将是组件中的函数:

 editPost() {
      let formData = new FormData();
      let headers = { headers: { "Content-Type": "multipart/form-data" } };
      let updatedPost = this.post_to_update;
      formData.append("post", updatedPost.description);
      formData.append("file", this.file);
      formData.append("video_link", updatedPost.video_link);
      axios
        .post("/posts/update/" + updatedPost.id, formData, headers)
        .then(response => {
          updatedPost.attach_file = response.data.attach_file;
          updatedPost.id = response.data.id;
          serverBus.$emit("post_edited", updatedPost);
        });

      this.file = "";
      this.post_to_update = {
        id: "",
        index: null,
        description: "",
        attach_file: "",
        video_link: "",
        name: this.profile_info.name,
        surname_1: this.profile_info.surname_1,
        surname_2: this.profile_info.surname_2,
        nick: this.profile_info.nick,
        picture: this.profile_info.picture,
        id_rol: this.profile_info.id_rol,
        time_ago: "0 minutes",
        code: this.profile_info.code
      };
      $("#EditModal").modal("hide");
    },

这是 web.php:

########################################################################################################################
# Post Routes
########################################################################################################################
Route::post('/posts/recommend', 'PostController@recommend')
    ->name('recommendPost');

Route::post('/posts/update/{id}', 'PostController@update');

Route::post('/posts/report', 'PostController@report')
    ->name('reportPost');

Route::get('/posts/{post}/comments', 'PostController@retrieveComments')
    ->where('post', '[0-9]+')
    ->name('commentsByPost');

Route::resource('/posts', 'PostController')
    ->only(['index', 'store', 'update', 'destroy']);

Route::get('/reportedPosts', 'PostController@reportedPosts');

控制器:

    public function update(StorePostRequest $request, $post_id)
    {
        return $this->postService->updatePost($request, $post_id);
    }

和服务:

    public function updatePost(StorePostRequest $request, $post_id)
    {
        $post_to_update = Post::where('id', $post_id)->first();
        $post_to_update->description  = $request->post;
        $post_to_update->attach_file  = $request->file ? $filename = sha1(time()) : null;
        $post_to_update->file_name    = $request->file ? $request->file->getClientOriginalName() : null;
        $post_to_update->file_type    = $request->file ? $request->file->getClientOriginalExtension() : null;
        $post_to_update->save();
        if ($request->file) {
            Storage::disk('s3')->putFileAs('storage/user_uploads/post_files/' . $post_to_update->id, $request->file, $filename, 'public');
            Storage::disk('local')->putFileAs('public/user_uploads/post_files/' . $post_to_update->id, $request->file, $filename, 'public');
        }
        return $post_to_update;
    }

【问题讨论】:

    标签: php laravel vue.js axios


    【解决方案1】:

    我认为StorePostRequest 类导致了用户授权的阻塞。

    尝试在StorePostRequest添加以下行以通过授权检查。

    public function authorize()
    {
         return true;   //Default false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 2023-03-22
      • 2014-02-17
      • 2018-03-06
      • 1970-01-01
      • 2020-07-17
      • 2020-07-16
      相关资源
      最近更新 更多