Пользовательская модель привязки формы Laravel 5.5

Я изучаю 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);

}

Возвращает идентификатор редактируемого пользователя в этом случае / usuario / 24 / edit

"24"

Маршруты объявлены следующим образом

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

Я хотел бы знать, если кто-то знает, как решить эту проблему, так как функция должна ссылаться на модель User, а затем на переменную $ user, если кто-то знает, как это исправить, или если я делаю что-то неправильно, это было бы очень полезно

0

Решение

Там нет проблем с тем, что вы сообщаете здесь. Это желаемое поведение Laravel Framework.

Если вы напечатаете подсказку Model, как вы делали в первом примере, Laravel попытается сделать следующее:

$user = User::findOrFail($user)

Но когда вы не введете подсказку, laravel не знает, какую модель следует загрузить с этим идентификатором, поэтому он просто пропустит 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);
}
}
2

Другие решения

Чтобы привязка модели работала в действии контроллера, вы должны использовать имя переменной, соответствующее параметру, который вы используете в объявлении маршрута, попробуйте сделать следующее:

public function edit(User $usuario)

Так как в вашем маршруте вы объявили, что в качестве параметра используется «usuario», привязка модели ищет переменную с тем же именем.

Вы можете проверить имя вашего параметра с помощью php artisan route:list

Это также написано в документах laravel, о привязке модели:

Laravel автоматически разрешает модели Eloquent, определенные в маршрутах или
действия контроллера, чья подсказка типа имена соответствовать маршруту
сегмент название

1

По вопросам рекламы [email protected]