2015-12-26 126 views
11

我是Laravel中的新成员并使用laravel 5.2版。未定义的变量:错误 - 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', 
     ]; 
    } 
} 

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错误在我的模板变量它显示错误未定义的变量:$错误 我试图解决问题但我没有。请告诉我我错在哪里。 add.blad.php

{{ var_dump($errors) }} 

Click here to see Error Image

+0

用'isset'做一个基本的检查,所以如果没有设置变量不会被回显。 –

+1

@MichaelSørensen这是Laravel,变量应该始终在所有视图中都可用。因此,如果不是以一种观点设定的话,那么这可能是一个需要在全球范围内解决的问题。 –

+0

@MichaelSørensen我跟随laravel教程,并做了相同的工作,我做了,但它显示未定义的变量$错误,我也尝试过使用isset($ error)检查,但在验证时没有显示任何错误。 –

回答

28

这是一个破碎的问题与5.2升级。发生了什么事是中间件负责使所有视图都可用的变量errors未被利用,因为它已从全局中间件移动到中间件组web

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

  1. 在你kernel.php文件(应用程序/ HTTP/Kernel.php),你可以移动middleware \Illuminate\View\Middleware\ShareErrorsFromSession::classprotected $middleware财产。

  2. 总结所有web路线与路由组和应用的网络中间件对他们说:

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

从这篇文章复制Laravel 5.2 $errors not appearing in Blade

+0

在这个链接中可以找到与截屏相同的解决方案:http://preprogrammer.com/undefined-variable-errors-in-laravel-5-2-solved/ –

-2

有了这个代码,您可以捕获错误并显示出来:

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

是的,我们可以从这种方式捕获错误消息,但这不是我的问题。我的问题是我面对这样的错误:未定义的变量$ errors.Read问题仔细。 –

+1

也许这可以帮助你:http://stackoverflow.com/questions/34420590/laravel-5-2-validation-errors – Kokno

+0

@Kokno的评论应该可能是一个答案..对链接的反应很好地解释了什么已经从5.1改为5.2 – mikey

1

只是削减的所有路由从路线。PHP文件,并将其粘贴中间件组“网络”之间,就像这样:

Routes file

+0

这样做给了我一个'FatalErrorException' - '调用null成员函数的参数()。 –

4

发布这个,因为它可能是有用的人,

由于普利文在第一个解决方案,您Kernel.php提到,从$middlewareGroups文件(app/Http/Kernel.php)移动\Illuminate\View\Middleware\ShareErrorsFromSession::classprotected $middleware财产,但同样会开始引发错误“会话存储不设置要求”,

解决这一举动 \Illuminate\Session\Middleware\StartSession::class,$middleware property

+0

“中间件属性”在哪里? –

0

5.2,只需将具有可变中间件组

2

这是因为下面的文件,在作曲家更新过程没有更新的错误路线,所以不具备mapWebRoutes方法来实现。

app/Providers/RouteServiceProvider.php 

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