Laravel 5.6 $ this-> validate vs Validator :: make () - PullRequest
0 голосов
/ 05 июля 2018

Я видел, что есть еще несколько вопросов, в которых они спрашивают, в чем разница между $this->validate и Validator::make(). Они действительно не ответили на концептуальный вопрос, который меня интересовал.

Есть ли правильное использование для каждого из них? Например, когда использовать один против другого?

То, как я в настоящее время использую его, в моих классах API, я использую if с $validator::make() (как показано ниже), в то время как в своей веб-части программы я использую $ this->validate() (также ниже)

Это правильный способ использовать это?

$ валидатор :: марка:

public function store(Request $request)
    {
        $validator = Validator::make($request->all(),[
            'name' => 'required',
            'url' => 'required',
            'isPublic' => 'required'
        ]);

        if($validator->fails()){
            return response($validator->messages(), 200);
        } else {

            Helpers::storeServer($request);

            return response()->json([
                'message'=> ['Server Stored']
            ]);
        }
    }

$ this-> Validate:

 public function store(Request $request)
    {

        $this->validate($request, [
            'name' => 'required',
            'url' => 'required',
            'isPublic' => 'required'
        ]);

        Helpers::storeServer($request);

        return redirect('dashboard')->with('success', 'Server stored');
    }

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

если не выполнить каких-либо правил на $this->validate, автоматически выдаст ошибку

$validator::make: вы можете легко обрабатывать ошибки, и, возможно, вы захотите обернуть любые данные в array () и перейти к $validator::make: для проверки

, а также, если вы хотите использовать FormRequest + привязка модели маршрута

ваш магазин () выглядит так

public function store(YourFormRequestRules $request)
    {
        Helpers::storeServer($request);

        return redirect('dashboard')->with('success', 'Server stored');
    }

public function update(YourFormRequestRules $request, Post $post)
{
    $post->title = $request->input('title');
    $post->save();
    return redirect()->route('example.index');
}

вот и все

0 голосов
/ 05 июля 2018

Использование $this->validate(): YourController расширяет класс Controller, который использует черту ValidatesRequests, и выглядит так:

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;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

Сама черта ValidatesRequests состоит из нескольких методов, которые получает базовый контроллер, а затем ваш собственный контроллер и который включает в себя:

validateWith($validator, Request $request = null)
...
validate(Request $request, array $rules, array $messages = [], array $customAttributes = [])
...
validateWithBag($errorBag, Request $request, array $rules, array $messages = [], array $customAttributes = [])
... and so on...

Эти методы помогают сделать некоторые проверки и запросы на обработку ошибок очень удобными и фактически учитывают упомянутый validate() метод.

Когда в переданном запросе возникает ошибка проверки, это помогает вам обработать ответ, не перегружая контроллер ненужной логикой; то есть, когда это ajax-вызов, он возвращает ответ 422 с телом json, в то время как он возвращает, заполняет пакет ошибок и заполняет переменную $errors для использования в шаблоне блейда для non-ajax.

Таким образом, это поможет вам только в том случае, если вы не хотите выполнять ручную проверку, создавая экземпляр Validator, поэтому разработчик должен сосредоточиться на выполнении реальной работы;)

UPDATE:

$validator = Validator::make() //creates an instance of the validator for further operations

// You can even do after the creating the instance of validator:
$this->validateWith($validator, $request)

//Lets do both steps above i.e the validation and trigger the Validation Exception if there's failure.
$this->validate($request, [...rules...], [...messages..]) 

Проверка: https://laravel.com/docs/5.6/validation#quick-writing-the-validation-logic

0 голосов
/ 05 июля 2018

Нет, они делают одну и ту же вещь двумя разными способами. Я имею в виду, что буквально $this->validate() вызывает метод make() в классе валидации. Если вы посмотрите на ValidatesRequests.php, реализованный controller.php, который расширяет ваш контроллер. Вызов метода validate():

$validator = $this->getValidationFactory()
             ->make($request->all(), $rules, $messages, $customAttributes);

Таким образом, в конечном итоге все заканчивается использованием метода make(). Существует различие в том, как оно обрабатывается, поскольку $this->validate вызывает:

if ($validator->fails()) {
    this->throwValidationException($request, $validator);
}

Таким образом, использование Validator::make() позволит вам обработать исключение самостоятельно, вместо $this->validate() автоматического создания исключения для вас. Это полезно для выполнения перед вашего перенаправления. Это показано в первом примере, поскольку вы проверяете, не прошла ли проверка, прежде чем решить, как с этим справиться. Во втором примере вы знаете, что если проверка не пройдена, она автоматически отклонит запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...