簡體   English   中英

Laravel 5.5表單模型綁定用戶

[英]Laravel 5.5 form model binding User

我正在學習laravel,遇到以下錯誤,我想知道是否有人可以幫助我解決它。 我有一個名為User的模型和一個受控調用UserController,我嘗試使用模型綁定來創建編輯,更新和銷毀。 在編輯功能中,我有以下代碼。

public function edit(User $user)
    {      
        dd($user); 
    }

該函數返回:

  User {#191 ▼
  #fillable: array:3 [▶]
  #dates: array:1 [▶]
  #hidden: array:2 [▶]
  #connection: null
  #table: null
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: false
  +wasRecentlyCreated: false
  #attributes: []
  #original: []
  #changes: []
  #casts: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #visible: []
  #guarded: array:1 [▶]
  #rememberTokenName: "remember_token"
  #forceDeleting: false
}

如果我刪除模型用戶

public function edit($user)
{ 

    dd($user); 

}

在這種情況下,返回正在編輯的用戶的ID / usuario / 24 / edit

"24"

路線聲明如下

  Route::resource('/usuario','UsuarioController');

我想知道是否有人知道如何解決此問題,因為該函數應該引用User模型,然后再引用$ user變量,如果有人知道如何解決它或者我做錯了事,那將有很大的幫助

您在這里報告的內容沒有問題。 這是所需的Laravel Framework行為。

如果您像在第一個示例中那樣鍵入提示模型,Laravel會嘗試執行以下操作:

$user = User::findOrFail($user)

但是,當您不鍵入提示時,laravel不知道應該使用該ID加載哪個模型,因此它只會傳遞用戶在請求參數中提供的id

更改您的代碼,如下所示:

// At the top of your controller add a use statement
use App\User;

class UserController extends Controller 
{
    //                    ▼ This is the typehint 
    //                         ▼ The parameter name should be the same resource name used on route
    public function edit(User $usuario)
    { 
        dd($usuario); 
    }
}

為了使模型綁定在控制器操作中起作用,您必須使用與您在Route聲明中使用的參數匹配的變量名,請嘗試以下操作:

public function edit(User $usuario)

由於在路線中您聲明tu使用“ usuario”作為參數,因此模型綁定將搜索相同名稱的變量。

您可以使用php artisan route:list檢查參數名稱

它也寫在laravel文檔中,關於模型綁定:

Laravel自動解析在路由或控制器操作中定義的口才模型,其類型提示的變量名稱與路由段名稱匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM