2016-11-07 8 views
1

で変数$エラー空の問題:Laravel 5.2.45 - 景色

$エラー変数がビューで空です。これは5.2で修正されているという話があるので、うまくいけば問題は私の目的である。

環境:

  • のMac OS X
  • Laravel 5.2.45

Codez:

routes.phpの

Route::get('/', '[email protected]'); 

Route::get('/register', function() { 
    return view('auth.register'); 
}); 

Route::auth(); 

Route::get('/home', '[email protected]'); 

Route::get('/alleles', '[email protected]'); 
Route::post('/allele', '[email protected]'); 
Route::delete('/allele/{allele}', '[email protected]'); 

AlleleController.php:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Allele; 

class AlleleController extends Controller { 

    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() { 
     // All methods require authentication except index. 
     $this->middleware('auth', ['except' => ['index']]); 
    } 

    /** 
    * Root page. 
    * 
    * @return Response 
    */ 
    public function index() { 
     return view('welcome'); 
    } 

    /** 
    * Create a new allele. 
    * 
    * @param Request $request 
    * @return Response 
    */ 
    public function store(Request $request) { 
     $allele = new Allele(); 
     // Get all input as an array. 
     $input = $request->all(); 
     // Validate input. 
     if ($allele->validate($input)) { 
      // Valid input. Write to database. 
      // The inserted model instance is returned. 
      $result = $allele::create($input); 
      if ($result) { 
       // Insert successful. 
       $message = array('message' => 'Data added!'); 
       return view('home', $message); 
      } else { 
       // Insert failed. Send errors to view. 
       $errors = array('errors' => 'Error saving data.'); 
       return view('home', $errors); 
      } 
     } else { 
      // Invalid input. Get errors. 
      $errors = $allele->errors(); 
      // Send errors to view. 
      return view('home', $errors); 
     } 
    } 
} 
?> 

HomeController.php:

<?php 

namespace App\Http\Controllers; 

use App\Http\Requests; 
use Illuminate\Http\Request; 

class HomeController extends Controller { 
    /** 
    * Create a new controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() { 
     $this->middleware('auth'); 
    } 

    /** 
    * Show the application dashboard. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() { 
     return view('home'); 
    } 
} 

モデル:Allele.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Allele extends Validation { 

    /** 
    * The attributes that are mass assignable. 
    */ 
    protected $fillable = ['allele']; 

    /** 
    * Validation rules. 
    */ 
    protected $rules = array (
     'allele' => 'required|max:20', 
    ); 
} 

モデル:Validation.php

<?php 

namespace App; 

use Validator; 
use Illuminate\Database\Eloquent\Model; 

class Validation extends Model { 

    protected $rules = array(); 

    protected $errors; 

    public function validate($input) { 
     // Make a new validator object. 
     $v = Validator::make($input, $this->rules); 

     // Check for failure. 
     if ($v->fails()) { 
      // Set errors and return false. 
      $this->errors = $v->errors(); 
      return false; 
     } 

     // Validation passed. 
     return true; 
    } 

    // Retrieves the errors object. 
    public function errors() { 
     return $this->errors; 
    } 
} 

ビュー:ビュー/共通/ errors.blade.php

@if (count($errors) > 0) 
    <!-- Form Error List --> 
    <div class="alert alert-danger"> 
     <strong>Whoops! Something went wrong!</strong> 
     <br><br> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 

ビュー:ビュー/ home.blade.php

@extends('layouts.app') 

@section('content') 
<div class="container"> 
    <div class="row"> 
     <div class="col-md-10 col-md-offset-1"> 
      <div class="panel panel-default"> 
       <div class="panel-heading">Dashboard</div> 

       <div class="panel-body"> 
        You are logged in! 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

<!-- Create New Allele --> 
<div class="panel-body"> 
    <!-- Display Validation Errors --> 
    @include('common.errors') 

    <!-- New Allele Form --> 
    <form action="{{ url('allele') }}" method="POST" class="form-horizontal"> 
     {{ csrf_field() }} 

     <!-- Allele Name --> 
     <div class="form-group"> 
      <label for="allele-name" class="col-sm-3 control-label">Allele</label> 
      <div class="col-sm-6"> 
       <input type="text" name="allele" id="allele-name" class="form-control"> 
      </div> 
     </div> 

     <!-- Add Allele Button --> 
     <div class="form-group"> 
      <div class="col-sm-offset-3 col-sm-6"> 
       <button type="submit" class="btn btn-default"> 
        <i class="fa fa-plus"></i> Add Allele 
       </button> 
      </div> 
     </div> 
    </form> 
</div> 
@endsection 
+2

あなたのルートは 'web'ミドルウェアグループの背後にある必要があります。 – user3158900

+1

はい、あなたは 'web middleware'の内部でバリデーターとしてあなたのすべてのルートを置くことをお勧めします。 – Sachith

答えて

0

すべての検証メソッドがweb middlewareの内側に配置する必要があります。他のエラーは表示されません。このようにroute.phpを交換してください。

Route::group(['middleware' => ['web']], function() 
{ 
Route::get('/', 'Alle[email protected]'); 

Route::get('/register', function() { 
    return view('auth.register'); 
}); 

Route::auth(); 

Route::get('/home', '[email protected]'); 

Route::get('/alleles', '[email protected]'); 
Route::post('/allele', '[email protected]'); 
Route::delete('/allele/{allele}', '[email protected]'); 
}); 
+1

@Sachitch:ありがとうございます。上記のようにroutes.phpを更新しましたが、$ errorsはビューに表示されていません。私は[文書](https://laravel.com/docs/5.2/middleware)によると、 "... Webミドルウェアグループは、RouteServiceProviderによってデフォルトのroutes.phpファイルに自動的に適用されます。"助言がありますか? –

+1

そのビューにエラーがありますか?基本的には形式で。 – Sachith

+1

@Sachitch:テキストボックスに20文字以上の値を入力すると、私のルールに従って、検証に失敗するはずです。値がデータベースに挿入されていないことを確認しました。ただし、ビューに検証エラーは表示されません。非常に奇妙な。 –