Php Laravel验证器在重定向后不显示消息?

Php Laravel验证器在重定向后不显示消息?,php,validation,laravel,Php,Validation,Laravel,我所做的很基本。在重定向之前,我可以看到我的验证错误,因此我认为我要么覆盖了会话(我没有这样做),要么从视图中删除了一些内容,这些内容也没有意义,因为验证器为我的\Auth\register工作,但没有其他操作 这就是我所拥有的: 在\App\Controllers\QuestionsController中 QuestionsController extends Controller{ protected$rules=[ 'question'=>array( 'te

我所做的很基本。在重定向之前,我可以看到我的验证错误,因此我认为我要么覆盖了会话(我没有这样做),要么从视图中删除了一些内容,这些内容也没有意义,因为验证器为我的\Auth\register工作,但没有其他操作

这就是我所拥有的:

在\App\Controllers\QuestionsController中

QuestionsController extends Controller{
protected$rules=[
    'question'=>array(
        'text'=>'required|max:2000',
        'categories'=>'required|min:4'
    )
];

public function create(Request $request){

    $valid=Validator::make($request->all(),$this->rules['question']);

    if($valid->fails()){
        var_dump($valid->messages());//exit;
        return redirect('/questions')->withErrors($valid,'questions');
    }
    //...additional adding scripts etc...
}
现在,在重定向之前,我可以在这里看到我的消息

现在你会认为我很傻,没有使用姓名袋之类的东西,但即使我去掉姓名袋,我也看不到任何信息:S

在我的问题中,添加视图

@import('defaults.errors',['sub'=>'questions'])
{{var_dump(count($errors))}}
{{var_dump($errors->questions)}}
错误

@if(isset($sub))
    @if(count($errors->$sub)>0)
        <div class="alert alert-danger">
            <ul class='nav'>
                @foreach($errors->$sub->all() as $error)
                    <li><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif
@else
    @if(count($errors)>0)
        <div class="alert alert-danger">
            <ul class='nav'>
                @foreach($errors->all() as $error)
                    <li><span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span> {{ $error }}</li>
                @endforeach
            </ul>
        </div>
    @endif
@endif
@if(isset($sub))
@如果(计数($errors->$sub)>0)

@恩迪夫
@否则
@如果(计数($errors)>0)

@恩迪夫
@恩迪夫
我想可能是因为我不太了解Laravel,可能是我“覆盖”了控制器中的$errors或session

这就是我的控制器的样子

<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesResources;
use Auth;

use App\conversation;
use App\notifications;
use App\relationships;
use App\Helpers\DatetimeHelper;

use Azza\Utilities\NumberSuffix;


class Controller extends BaseController
{
    public $user;
    public $title=array('title');
    public $titleSeperator=' - ';
    public $keywords=array('hello','I added');
    public $messageCount=0;
    public$notifications=null;
    public$notificationsCount=0;
    public$friendRequests=0;
    public$bodyClass=array();

    use AuthorizesRequests, AuthorizesResources, DispatchesJobs, ValidatesRequests;

    public function __construct(){
        $this->user=Auth::user();
        if($this->user){
            $this->messageCount=conversation::getByUserId($this->user->id)->countUnseen()->count();
            //$this->notifications=notifications::getByUserId($this->user->id)->get()->paginate(5);
            $this->notificationsCount=notifications::getByUserId($this->user->id)->countUnseen()->count();
            //var_dump($this->messageCount->count());exit;  
            $this->friendRequests=relationships::countRequests($this->user->id)->count();
        }
        view()->composer('*',function($view){
            $view->with('currentUser',$this->user);
            $view->with('title',$this->title);
            $view->with('titleSeperator',$this->titleSeperator);
            $view->with('keywords',$this->keywords);
            $view->with('messageCount',$this->messageCount);
            $view->with('notificationsCount',$this->notificationsCount);
            $view->with('friendRequests',$this->friendRequests);
            $view->with('DatetimeHelper',new DatetimeHelper());
            $view->with('NumberSuffix',new NumberSuffix());
            $view->with('bodyClass',implode(' ',$this->bodyClass));
        });
    }
    public function setDefaultVals($name,$val){
        view()->composer('*',function($view) use($name,$val){
            $view->with($name,$val);
        });
    }
}
试试看


我已经在我的Laravel环境中设置了您的代码,您所做的一切都是正确的。但是,在
5.2
laravel的中间件中,其行为稍有不同,只有当
StartSession
中间件处于活动状态时,
$errors
变量才可用

您的Kernel.php将如下所示或类似:

/**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ]; 
尝试将其更改为:

/**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Session\Middleware\StartSession::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];

注意
\illumb\Session\Middleware\StartSession::class

上的开关a-roo,不,没有。通过在
Route::get('/errors',function(){…})上执行一个函数,我绕过了控制器还是没什么。。。奇怪的是,你在你的
问题中看到了什么。从这一行添加
视图:
{{{var_dump($errors->questions)}
没问题,你总能从Laravel那里看到这些怪癖!我唯一不明白为什么这不起作用的是我的路由被分组在web中间件中?那么,为什么移动startSession类会起作用呢?是因为中间件是按顺序加载的吗?
/**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Session\Middleware\StartSession::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];