【问题标题】:post form action to controller in laravel将表单操作发布到 laravel 中的控制器
【发布时间】:2019-09-12 21:19:20
【问题描述】:

首先我想说我的问题和question非常相似,只是答案在我的情况下不起作用。

我正在尝试将我的表单操作连接到我的 UserController。这是一个更新头像功能。这是它的样子。

在我的个人资料/show.blade

<div class="col-md-12 justify-content-center">
    <form action="{{ action('UsersController@update_avatar') }}" method="post" enctype="multipart/form-data">
        @csrf

    </form>
</div>

用户控制器

public function avatar()
{
    $user = Auth::User();
    return view('dashboard.profile'.$user->id,compact('user',$user));
}

public function update_avatar(Request $request){

    $request->validate([
        'avatar' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
    ]);

    $user = Auth::User();

    $folder = 'avatars';
    Storage::delete($folder.'/'.$user->avatar); 

    $avatarName = $user->id.'_avatar'.'.'.request()->avatar->getClientOriginalExtension();

    $request->avatar->storeAs('avatars',$avatarName);

    $user->avatar = $avatarName;
    $user->save();

    return back()
        ->with('success','You have successfully upload image.');
}

路由/web.php

Route::get('dashboard/profile/{{profile}}', 'Dashboard\\UsersController@avatar');
Route::post('dashboard/profile/{{profile}}', 'Dashboard\\UsersController@update_avatar');

这是我收到的错误

非常感谢您!

【问题讨论】:

  • 有什么建议吗?
  • 你的profile模特长什么样?

标签: laravel forms action


【解决方案1】:

更改这些路线:

Route::get('dashboard/profile/{{profile}}', 'Dashboard\\UsersController@avatar');
Route::post('dashboard/profile/{{profile}}', 'Dashboard\\UsersController@update_avatar');

对这些:

Route::get('dashboard/profile/{{profile}}', 'UsersController@avatar')->name('user.avatar');
Route::post('dashboard/profile/{{profile}}', 'UsersController@update_avatar')->name('user.update_avatar');

在你的表单中使用 route 而不是 action

<form action="{{ route('user.update_avatar') }}" method="post" enctype="multipart/form-data">
    @csrf
</form>

【讨论】:

  • 嗨@charles。它说“缺少 [Route: user.update_avatar] [URI: dashboard/profile/{{profile}}] 所需的参数”
  • 它说缺少参数,因为你告诉 Laravel 在你的 Route 中寻找 profile id,但实际上并没有传递一个(或使用一个)。
  • 它通过将您建议的路线更新为:Route::get('dashboard/profile/', 'Dashboard\\UsersController@avatar')->name('user.avatar'); Route::post('dashboard/profile/', 'Dashboard\\UsersController@update_avatar')->name('user.update_avatar');谢谢!!!
【解决方案2】:

您可以尝试这样做:

Route::post('dashboard/profile','Dashboard\UsersController@update_avatar')->name(profile.update);

并以如下形式使用它:

<form action="{{ route('profile.update') }}">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2012-05-06
    • 2017-08-24
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多