2016-11-07 56 views
1

問題:

的$錯誤變量是空的觀點。有人說這個問題已經在5.2中解決了,所以希望問題在於我。

環境:

  • 的Mac OS X
  • Laravel 45年2月5日

的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中間件' – Sachith

回答

0

所有的驗證方法應放在裏面web middleware。我沒有看到任何其他錯誤。像這樣替換您的route.php

Route::group(['middleware' => ['web']], function() 
{ 
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]'); 
}); 
+1

@Sachitch:謝謝。我按照上面的描述更新了我的routes.php,但$ errors沒有顯示在視圖中。我注意到[文檔](https://laravel.com/docs/5.2/middleware)說:「...網絡中間件組由RouteServiceProvider自動應用到您的默認routes.php文件。」有什麼建議麼? –

+1

您確定在該視圖中有錯誤嗎?基本上在形式上。 – Sachith

+1

@Sachitch:如果我在文本框中輸入了超過20個字符的值,根據我的規則,它應該驗證失敗。我驗證了該值沒有插入到數據庫中。但是,我沒有在視圖中收到驗證錯誤。很奇怪。 –

相關問題