2015-12-26 141 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 

從全新安裝中複製此文件,它將起作用。更好的是,按照文檔的升級路徑。