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