2017-06-13 63 views
9

blade.phplaravel zatwierdź funkcji użytkownika

...... 
<tr> 
    <td>{{ Form::label('cameraMac', 'Mac: ') }}</td> 
    <td>{{ Form::text('cameraMac')}}</td> 
</tr> 
...... 

controller.php

$data = Input::all(); 
function transform($cameraMac) { 
    return strtoupper($cameraMac); 
} 

//validation here 

$user = User::find($data['user_id']); 

if($data["cameraMac"]) 
{ 
    $user->camera_id = transform($data["cameraMac"]); 
    Cloud_camera::create(['id' => transform($data["cameraMac"]), 'user_id' => $user->id]); 
} 

$user->save(); 

muszę przekształcić cameraMac do klucza podstawowego do przechowywania w db. Jak korzystać z funkcji transform() w regule sprawdzania poprawności 'nullable|unique:cloud_cameras,id|size:6'. To znaczy, jak mogę wywołać tę funkcję w procesie sprawdzania poprawności.

Odpowiedz

3

Jeśli trzeba jakoś przekształcenia danych wejściowych można użyć metody merge:

Input::merge(['cameraMac' => transform(Input::get('cameraMac')]); 
$this->validate(Input::getFacadeRoot(), [ 
    'cameraMac' => 'nullable|unique:cloud_cameras,id|size:6' 
]); 

Jako osobistych preferencji I wag Oulda zamiast typ-wskazówkę Illuminate\Http\Request $request w sposobie regulatora i

$request->merge(['cameraMac' => transform($request->cameraMac)]); 
$this->validate($request, ['cameraMac' => 'nullable|unique:cloud_cameras,id|size:6' 
]); 
+0

jest sposób wywołania tej funkcji w walidatorze, a nie trans danych w pierwszej kolejności. –

+0

@KrisRoofe tak, można utworzyć niestandardowe ["żądanie formularza"] (https://laravel.com/docs/5.4/validation#form-request-validation), w którym można umieścić logikę walidacji i autoryzacji, a także zastąpić metoda 'validationData' i wykonaj tam' scalanie'. – alepeino

1

Czy chcesz, aby pole cameraMac było zerowalne jako (bardziej lub mniej) klucz podstawowy?

Powinieneś również użyć sprawdzania poprawności int do korzystania z walidacji size.
Trzeci parametr uniquevalidation to except, który zignoruje podany identyfikator.

Twój walidacji w kontroler mógłby wyglądać następująco

$except_id = $request->input('cameraMac', null); 

$this->validate($request, [ 
    'cameraMac' => 'nullable|unique:cloud_cameras,id,'.$except_id.'|int|size:6' 
]); 

One example jak można pokazać błędy swojej walidacji w poglądach będzie to

@if (count($errors) > 0) 
    <div class="alert alert-danger"> 
     <ul> 
      @foreach ($errors->all() as $error) 
       <li>{{ $error }}</li> 
      @endforeach 
     </ul> 
    </div> 
@endif 
+0

Tak To jest klucz podstawowy. Po wyjściu zostanie utworzona nowa kamera. I związać się z użytkownikiem. jeśli nie istnieje, identyfikator camera_id użytkownika jest pusty. –

1

na razie trans danych wejściowych, następnie sprawdzić jego poniższy sposób.

Ale szukam sposobu, aby nazwać ten funciton w walidacji.

$data = Input::all(); 
$data['cameraMac'] = transform($data['cameraMac']); 
$rules = array(
    'id' => 'required|unique:cloud_printers,id|size:6', 
    'cameraMac' => 'unique:cloud_cameras,id|size:6', 
); 
$validator = Validator::make($data, $rules); 
if ($validator->fails()) 
    return Redirect::back()->withInput()->withErrors($validator); 
+0

Reguła sprawdzania poprawności polega na porównaniu jednego obiektu z innym obiektem lub regułą. Nie ma tu miejsca na przekształcenie danych przed ich porównaniem.Dlaczego chcesz to mieć, więc wygląda ładniej? i czy powinien być zapisany w bazie danych dużymi literami? jeśli tak, musisz to wcześniej przekształcić. – mimo

+0

@mimo Górna transformacja jest tylko prostym przykładem, w rzeczywistości robię zaszyfrowanie. –

+1

Po prostu chcesz go przekształcić do sprawdzania poprawności, a następnie powinno być znowu normalne? Możesz napisać niestandardowy znacznik sprawdzania poprawności i wykonać w nim całą walidację. – mimo

2

Pomyślę defining a middleware.

Oprogramowanie pośredniczące dokona transformacji i połączy wynik z żądaniem przed naciśnięciem kontrolera.

class TransformId { 
    public function handle(Request $request, Closure $next) { 
     // shout out to @alepeino 
     $request->merge(['cameraMac' => transform($request->cameraMac)]); 

     return $next($request); 
    } 
} 
1

można zdefiniować custom validation rule:

Validator::extend('transformUpper', function ($attribute, $value, $parameters, $validator) { 
    return strtoupper($value); 
}); 

Następnie użyj nowej reguły na wniosek, jak zwykle:

$this->validate($request, [ 
    'cameraMac' => 'required|transformUpper' 
]); 
+0

Jak mogę używać niestandardowego sprawdzania poprawności i unikalnej sprawdzania poprawności razem? Chcę, aby przekształcony cameraMac był unikalny w bazie danych. –

+0

Zwraca Validator true lub false, nie sądzę, że twój kod zmieni wartość wejściową cameraMac. –

Powiązane problemy