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

时间:2015-12-26 18:51:16

标签: 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 function authorize()
    {
        return true;
    }

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

ArticlesController

<?php

namespace App\Http\Controllers;

use App\Article;
//use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use App\Http\Requests\CreateArticleRequest;

class ArticlesController extends Controller
{

    public function add(){
        return view('articles.add');
    }

    public function create_article_row(CreateArticleRequest $request){
        Article::create($request->all());
        return redirect('articles/');
    }
}

当我在名为 add.blade.php 的模板中使用$ errors变量时,显示错误未定义变量:$ errors 我试图解决问题,但我确实没有。请告诉我我错在哪里。 的 add.blad.php

{{ var_dump($errors) }}

Click here to see Error Image

6 个答案:

答案 0 :(得分:30)

这是5.2升级的一个突破性问题。正在发生的是中间件,它负责使所有视图可用的errors变量未被利用,因为它已从全局中间件转移到web中间件组。

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

  1. kernel.php文件(app / Http / Kernel.php)中,您可以将middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class移回protected $middleware属性。

  2. 使用路由组包裹所有web路由,并将Web中间件应用于它们:

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

    从此帖Laravel 5.2 $errors not appearing in Blade

    复制

答案 1 :(得分:4)

发布此内容可能对其他人有用,

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

解决此举动 \Illuminate\Session\Middleware\StartSession::class,也可以$middleware property

答案 2 :(得分:2)

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

app/Providers/RouteServiceProvider.php

从全新安装中复制此文件,它将起作用。更好,请按照文档上的升级路径进行操作。

答案 3 :(得分:1)

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

Routes file

答案 4 :(得分:0)

对于5.2,只需将具有errors变量的路由移动到中间件组

答案 5 :(得分:-2)

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

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