0

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

我在以下方面进行了更改:

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


RegisterController.php:添加这个函数:

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

网页.php:

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

register.blade.php:试试这个但得到错误信息:

<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>

我需要变量“角色”可以在 register.blade.php 中使用

4

2 回答 2

0

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

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

于 2019-04-01T10:32:32.227 回答
-1

我认为你应该使用

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

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

于 2019-04-01T10:17:09.977 回答