Php 未定义变量:错误--Laravel 5.2

Php 未定义变量:错误--Laravel 5.2,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我是Laravel的新手,正在使用Laravel 5.2版 我分别创建了名为ArticlesController和CreateArticleRequest的控制器和请求,并定义了一些验证规则 CreateArticleRequest <?php namespace App\Http\Requests; use App\Http\Requests\Request; class CreateArticleRequest extends Request { public funct

我是Laravel的新手,正在使用Laravel 5.2版

我分别创建了名为ArticlesControllerCreateArticleRequest的控制器和请求,并定义了一些验证规则

CreateArticleRequest

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

class CreateArticleRequest extends Request
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'title' => 'required|min:3',
            'body' => 'required|max:400',
            'published_at' => 'required|date',
        ];
    }
}

使用此代码,您可以捕获错误并显示它们:

@if ($errors->any())
 <div class='alert alert-danger'>
  @foreach ( $errors->all() as $error )
   <p>{{ $error }}</p>
  @endforeach
 </div>
@endif
@if($errors->any())
@foreach($errors->all()作为$error)
{{$error}}

@endforeach @恩迪夫
这是5.2升级的一个重大问题。发生的情况是,负责将
错误
变量提供给所有视图的中间件没有被使用,因为它已从全局中间件移动到
web
中间件组

有两种方法可以解决此问题:

  • kernel.php
    文件(app/Http/kernel.php)中,可以将
    middleware\light\View\middleware\ShareErrorsFromSession::class
    移回
    protected$middleware
    属性

  • 使用路由组包装所有
    web
    路由,并对其应用web中间件:

    Route::group(['middleware' => 'web'], function() {
        // Place all your web routes here...(Cut all `Route` which are define in `Route file`, paste here) 
    });
    
  • 抄袭自本帖


    只需从routes.php文件中剪切所有路由并将其粘贴到中间件组“web”之间,如下所示:


    发布此信息,因为它可能对其他人有用

    正如Praveen在第1个解决方案中提到的,在您的
    Kernel.php
    文件(
    app/Http/Kernel.php
    )中,移动
    \illumb\View\Middleware\ShareErrorsFromSession::class
    $middlewareGroups
    protected$middleware
    属性,但该属性将开始抛出错误“会话存储未按请求设置”

    要解决这一问题,
    \Lightning\Session\Middleware\StartSession::class,
    $Middleware属性

    对于5.2,只需将包含错误变量的路由移动到Middleware组

    ,这是因为在composer更新过程中未更新下面的文件,因此没有实现
    mapWebRoutes
    方法

    app/Providers/RouteServiceProvider.php
    

    从新安装中复制此文件,它将正常工作。更好的方法是,按照文档上的升级路径进行操作。

    使用
    isset
    进行基本检查,这样如果未设置变量,就不会回显。@MichaelSørensen它是Laravel,该变量应该在所有视图中始终可用。因此,如果它不是在一个视图中设置的,那么它很可能是一个需要全局解决的问题。@MichaelSørensen我正在学习laravel教程,在那里我做了与我相同的工作,但它显示了未定义的变量$errors,我还使用isset($error)进行了尝试检查,但在验证时,它不会显示任何错误。是的,我们可以通过这种方式捕获错误消息,但这不是我的问题。我的问题是,我面临这样的错误:未定义变量$errors。请仔细阅读问题。也许这可以帮助您:@Kokno的注释可能是一个答案。。链接上的响应很好地解释了从5.1到5.2的变化。在这个链接中可以找到带有屏幕截图的相同解决方案:
    中间件属性
    ?这样做给了我一个
    FatalErrorException
    --
    调用null上的成员函数parameters()。
    
    Route::group(['middleware' => 'web'], function() {
        // Place all your web routes here...(Cut all `Route` which are define in `Route file`, paste here) 
    });
    
    app/Providers/RouteServiceProvider.php