Я изучаю 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, если кто-то знает, как это исправить, или если я делаю что-то неправильно, это было бы очень полезно
Там нет проблем с тем, что вы сообщаете здесь. Это желаемое поведение 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);
}
}
Чтобы привязка модели работала в действии контроллера, вы должны использовать имя переменной, соответствующее параметру, который вы используете в объявлении маршрута, попробуйте сделать следующее:
public function edit(User $usuario)
Так как в вашем маршруте вы объявили, что в качестве параметра используется «usuario», привязка модели ищет переменную с тем же именем.
Вы можете проверить имя вашего параметра с помощью php artisan route:list
Это также написано в документах laravel, о привязке модели:
Laravel автоматически разрешает модели Eloquent, определенные в маршрутах или
действия контроллера, чья подсказка типа имена соответствовать маршруту
сегмент название