【问题标题】:Laravel - ErrorException (E_ERROR) Undefined variableLaravel - ErrorException(E_ERROR)未定义的变量
【发布时间】:2019-04-01 10:12:40
【问题描述】:

我正在尝试向 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'));
}

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

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

【问题讨论】:

  • $roles = rol::all();你认为你做得对吗?
  • 你可以展示整个 RegisterController 吗?
  • Route::get('auth.register', 'auth.RegisterController@combo');一个网址怎么会这样??
  • 它说哪个变量未定义?完整的错误是什么?
  • 这是文件名 - 完整的错误信息是什么?

标签: php laravel laragon


【解决方案1】:

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

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

【讨论】:

  • 请去掉过大的字体和粗体
【解决方案2】:

我认为你应该使用

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

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

【讨论】:

  • 对不起,我编辑了我的答案,因为它可能是一个路线问题 => 你是否正确调用了 combo() 方法? dd() 显示了吗?
  • 你能展示如何加载标准的RegisterController方法吗?谢谢
  • 编辑了我的答案
猜你喜欢
  • 2018-11-29
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2018-01-26
  • 2020-09-24
  • 2018-12-12
相关资源
最近更新 更多