2016-06-10 162 views
1

我所做的很基本。在重定向之前我可以看到我的验证错误,所以我认为我已经覆盖了会话(我不这样做)或从视图中删除某些东西,这也是没有意义的,因为验证器适用于我的\ Auth \ register但没有其他行动。Laravel验证器在重定向后不显示消息?

这是我有:

在\软件\ \控制器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... 
} 

现在,这是重定向我可以看到我的消息之前!

现在你会觉得我傻,而不是使用名称的袋子或东西,但即使我删除名称袋我没有看到消息:•

在我question.add鉴于

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

在defaults.errors

@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 

我想,也许是因为我不明白Laravel那么好,也许我已经“覆盖”事做在我的控制器的$错误或会话?

这是我的控制器看起来像

<?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。

+0

在交换机-A-Roo的你可以从你的行的'questions.add'视图中看到任何东西:'{{var_dump($ errors-> questions)}}' – jakehallas

回答

1

我已经设置了你的代码在我的Laravel的环境中,你正在做的一切都是正确的。但是,在5.2 laravel的中间件中作用稍有不同,您的$errors变量仅在中间件活动的StartSession时才可用。

你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', 
     ], 
    ]; 

通知上\Illuminate\Session\Middleware\StartSession::class

+0

非常感谢!我知道这将是非常愚蠢的事情!谢谢:) – sourRaspberri

+0

没问题,你总是可以期待Laravel的这些怪癖! – jakehallas

+0

我不明白为什么这不起作用的唯一的事情是我的路线被分组在网络中间件的东西?那么为什么要移动startSession类呢?是否因为中间件按顺序加载? – sourRaspberri

0

尝试

return redirect('/questions')->withErrors($valid->messages()); 
+0

不,没有。我通过在Route :: get('/ errors',function(){...})上执行一个函数来传递控制器;'仍然没有......怪异的 – sourRaspberri