Laravel - ErrorException (E_ERROR) 未定义的变量

Laravel - ErrorException (E_ERROR) Undefined variable

我正在尝试向 auth.register 添加下拉菜单,但出现错误(未定义的变量)。我已经尝试了很多东西,但没有任何反应。

我已更改:

RegisterController.php、Register.blade.php、web.php


RegisterController.php: Add this function:

public function combo() {
    $roles = rol::all();
    dd($roles);
    return view('auth.register',compact('roles'));
}

web.php:

Auth::routes();
Route::get('auth.register', 'auth.RegisterController@combo');
Route::get('/home', 'HomeController@index')->name('home');

register.blade.php: Try this but get the error message:

<select name="id_rol" id="id_rol" class="form-control">
    <option value="" disabled>Choose an option</option>
    @foreach ($roles as $rol)
        <option value="{{ $rol->id }}">
            {{ $rol->nombre }}
        </option>
    @endforeach
 </select>

我需要变量 "roles" 可以在 register.blade.php

中使用

我认为你应该使用

return view('auth.register', ['roles' => $roles]);

假设 $roles 是一个标准的 eloquent 集合,它应该可以正常工作

除此之外,您应该检查路线是否正常。如果您自动生成 Auth 路径并使用

Auth::routes();

在您的路线中,如果将路线放在该行下方,您的路线将被忽略。

因此,请检查您的路由是否全部到位,否则您可能正在为您的路由加载标准的 RegisterController 方法,但仍在加载新视图(没有 $roles 变量)

如果你需要调用自定义函数,在web.php中你应该调用Auth::routes()之前的路径或者(更好)覆盖方法

无需编辑 Auth::routes(),您只需覆盖 RegistrationController.php

中的 showRegistrationForm() 方法即可

Auth\RegistrationController.php

public function showRegistrationForm() {

    $roles = rol::all();
    dd($roles);
    return view('auth.register', ['roles' => $roles]);

}

并删除你的

Route::get('auth.register', 'auth.RegisterController@combo');

因为它被忽略了(laravel 检查第一次出现并且 Auth::routes() 在您的自定义路由之前被读取)

另一个编辑供将来参考: 如果您使用 CLI 命令

php artisan route:list

你得到你的路由调用的所有方法的列表,看看你的设置是否正确

首先,Auth::routes(); 已经有 route('/register') 指向不同的函数

所以注释掉 Auth::routes(); 并使用你的 Route::get('/register', 'auth.RegisterController@combo');