2015-12-26 5 views
11

Я новичок в Laravel и использую версию laravel 5.2.Неопределенная переменная: ошибки - 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 это показать ошибки неопределенной переменной: $ ошибки Я попытался решить проблему lem но я did't. Пожалуйста, скажите мне, где я неправ. add.blad.php

{{ var_dump($errors) }} 

Click here to see Error Image

+0

Проведите базовую проверку с помощью 'isset', поэтому переменная не будет эхом, если не установлена. –

+1

@ MichaelSørensen Это Laravel, переменная должна всегда быть доступна во всех представлениях. Поэтому, если он не задан в одном представлении, это, вероятно, проблема, которую необходимо решать во всем мире. –

+0

@ MichaelSørensen Я следую учебным пособиям по laravel, и там была сделана такая же работа, что и я, но она отображала неопределенные переменные $ errors, и я также попробовал ее с проверкой isset ($ error), но при проверке она не обнаруживает никаких ошибок. –

ответ

28

Это ломка проблема с обновлением 5.2. Что происходит, это промежуточное программное обеспечение, которое отвечает за то, что переменная errors доступна для всех ваших просмотров, не используется, поскольку она была перенесена из глобального промежуточного программного обеспечения в группу промежуточного программного обеспечения web.

Есть два способа исправить это:

  1. В файле kernel.php (приложение/Http/Kernel.php), вы можете переместить middleware \Illuminate\View\Middleware\ShareErrorsFromSession::class назад к protected $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. –

+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

Проводка это как это могло бы быть полезным для других,

Как Praveen упоминается в 1-ом растворе, в вашем Kernel.php файл (app/Http/Kernel.php) переместить \Illuminate\View\Middleware\ShareErrorsFromSession::class от $middlewareGroups к protected $middleware собственности, но то же самое будет начать бросать ошибки «магазин Session не установлен по запросу»,

разрешить этот шаг \Illuminate\Session\Middleware\StartSession::class, до $middleware property.

+0

Где «свойство промежуточного программного обеспечения»? –

0

Для 5.2, просто переместить маршруты, которые имеют ошибки переменные к промежуточной группе

2

Это происходит потому, что файл ниже не обновляется в процессе обновления композитора, поэтому не метод mapWebRoutes реализован.

app/Providers/RouteServiceProvider.php 

Скопируйте этот файл из новой версии и он будет работать. Лучше следуйте пути обновления в документах.

Смежные вопросы