2016-07-19 15 views
0

Es scheint meine Validierung ist nicht ganz richtig, also ich bekomme diese Fehlermeldung, während ich versuche, Gebühren in meine Datenbank zu speichern.Ich versuchte Validierung und ich bekomme diese Mesaage: Methode [validateString] existiert nicht

Ich habe zuvor verwandte Fragen überprüft, aber es hat nicht wirklich geholfen. Ich habe FeeValidator die Validator mit diesem Array erweitert:

<?php namespace \Events\Services\Validations; 

    use \Events\Services\Validations\AbstractValidator as Validator; 

    class FeeValidator extends Validator { 
     protected $rules = array(
      'title'   =>  'required', 
      'price'   =>  'required|numeric', 
      'quantity'  =>  'integer', 
      'valid_from' =>  'date', 
      'valid_to'  =>  'date', 
      'ticket_limit' =>  'integer', 
      'url_redirect' =>  'string', 
     ); 
    } 

Dann habe ich eine FeesRepository mit diesem Shop() Funktion im FeesRepository Klasse:

<?php namespace \Events\Repositories; 

use \Events\Models\Fee as Fees; 
use \Events\Models\Event as Event; 
use \Events\Repositories\Contracts\FeesRepositoryInterface; 
use \Events\Services\Validations\FeeValidator; 

class FeeRepository implements FeesRepositoryInterface { 

    protected $theme; 

    protected $feeValidator; 

public function store($eventId) { 

     $validation = $this->feeValidator->with(\Input::all()); 

     if ($validation->passes()) { 
      $fee = new Fees; 
      $fee->event_id   = $eventId; 
      $fee->title    = \Input::get('title'); 
      $fee->price    = \Input::get('price'); 
      $fee->quantity   = \Input::get('quantity') == "" ? 1 : \Input::get('quantity'); 
      $fee->discount   = \Input::get('discount'); 
      $fee->valid_from  = \Input::get('valid_from'); 
      $fee->valid_to   = \Input::get('valid_to'); 
      $fee->coupon   = \Input::get('coupon') == "" ? null : \Input::get('coupon'); 
      $fee->tickets_limit  = \Input::get('ticket_limit'); 
      $fee->url_redirect  = \Input::get('url_redirect'); 
      $fee->save(); 

      $id = $fee->event->id; 
      if ($fee->event->eventable_type == '\Events\Models\Training') 
      { 
       return \Redirect::route('admin.training.edit' , array($id)); 
      } 
      elseif($fee->event->eventable_type == '\Events\Models\Meetup') { 
       return \Redirect::route('admin.meetup.edit' , array($id)); 
      } 
      else 
      { 
       return \Redirect::route('admin.conference.edit' , array($id)); 
      } 

     } 

      else { 
          return \Redirect::back()->withInput()->withErrors($this->feeValidator->errors()); 
       } 

    } 

} 

Sie schließlich kann meine store() Funktion im FeesController überprüfen :

<?php namespace \Events\Controllers; 

use \Events\Repositories\FeeRepository as Fee; 
use \Events\Models\Fee as Fees;use \Events\Services\Validations\FeeValidator; 


    class FeesController extends \BaseController { 

     protected $fee; 

     protected $feeValidator; 

     public function __construct(Fee $fee , FeeValidator $feeValidator) 
     { 
      $this->fee = $fee; 
      $this->feeValidator = $feeValidator; 
     } 

    public function store($eventId) { 
        return $this->fee->store($eventId); 
      } 
     } 

Ich wundere mich, was das Problem ist. Kann mir jemand einen Hinweis geben? Danke!

+0

Welchen Fehler erhalten Sie? – Daniel

+0

poste deinen Fehler in Frage. –

Antwort

0

Für Ihre Validierung können Sie Standard Validierung verwendet werden, die in Laravel bauen bereits https://laravel.com/docs/5.2/validation Fehler anzuzeigen Sie JS oder einfach in Ihrem Formular ex verwenden können:

<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}"> 
    <label for="email" class="col-md-4 control-label">E-Mail Address</label> 
<div class="col-md-6"> 
<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}"> 
@if ($errors->has('email')) 
    <span class="help-block"> 
    <strong>{{ $errors->first('email') }}</strong> 
    </span>@endif 
</div> 
</div> 

EDIT: hey, Sie haben eine einfache Validierung, so dass Sie eine einfache Möglichkeit haben, eine Validierung wie diese zu verwenden, aber Ihr Weg ist richtig, aber warum können Sie nicht einfach versuchen? Dies für Laravel 4.2 einfache Möglichkeit, Validierungsbeispiel

Route::post('register', function() 
{ 
    $rules = array(...); 

    $validator = Validator::make(Input::all(), $rules); 

    if ($validator->fails()) 
    { 
     return Redirect::to('register')->withErrors($validator); 
    } 
}); 
zu verwenden
+0

Ich benutze Laravel 4.2 und ich versuche, was nicht funktioniert und es funktioniert nicht. Versuchte diese zwei Vorschläge. Vielleicht ist das Array ** $ rules ** nicht richtig definiert. –

+0

@ ajax_27 chek mayb es wird dir helfen – Hamelraj

+0

Ich habe versucht zu validieren, wie du mir vorgeschlagen hast und es funktioniert, aber mein Projekt ist auf eine andere Weise gebaut, also versuche ich, dieser Konvention zu folgen. Das Problem war die Validierungsregel von Laravel 4.2. Danke nochmal für Hilfe! –

0

Ich weiß nicht, wich Rahmen Sie es verwenden, aber hier ist meine Laravel Validierung

Verwendung Validator;

$rules = array(
     'token' => 'required|min:5|max:50|string' 
    ); 
    // Create a new validator instance from our validation rules 
    $validator = Validator::make(Input::all(), $rules); 


    // If validation fails, we'll exit the operation now. 
    if ($validator->fails()) { 
     return $validator->messages()->toJson(); 
    }