Slim Respect Validation проблема - PullRequest
0 голосов
/ 03 октября 2018

Respect \ Validation \ Validator.У меня есть класс валидатора validator.php

<?php

namespace app\http\validations;
use Respect\Validation\Validator as Respect;
use Respect\Validation\Exceptins\NestedValidationException;

class Validator {

    protected $errors = [];
    public function validate($request, array $rules){
        foreach ($rules as $field => $rule) {
            try{
               $rule->setName(ucfirst($field))->assert($request->getParam($field)); 
            } catch (NestedValidationException $ex) {
                $this->errors[$field] = $ex->getMessages();
            }

        }
        return $this;
    }

    public function failed(){
        return !empty($this->errors);
    }
}

Затем я использую эту проверку в контроллере, и вот мой контроллер:

<?php

namespace app\http\controllers\v1;


use Slim\Http\Request;
use Slim\Http\Response;
use Respect\Validation\Validator as v;

use app\providers\v1\CompanyServiceProvider;

class CompanyController extends BaseApiController {

    public $companyServiceProvider;

    public function __construct() {
        $this->companyServiceProvider = new CompanyServiceProvider();
    }

    public function saveBasicDetails(Request $request, Response $response) {
        $validator = new \app\http\validations\Validator();
        $validation = $validator->validate($request, [
            'company_name' => v::notEmpty()->alpha()
         ]);

        if($validation->failed()){
            print_r($validation); die;
        }

        $result = $this->companyServiceProvider->saveBasicDetails($request);
        return BaseApiController::returnResponse($response, $result);
    }

}

Вотмой маршрут, я вызываю функцию saveBasicDetails из маршрута.

$app->post('/save-basic-details', \app\http\controllers\v1\CompanyController::class. ':saveBasicDetails');

Я получаю следующую ошибку: Эти правила должны пройти для Company_name

Я хотелвернуть ошибки проверки в JSON.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Ребята, я допустил глупую ошибку. В

use Respect\Validation\Exceptins\NestedValidationException;

исправлена ​​ошибка

use Respect\Validation\Exceptions\NestedValidationException;

Исправлена ​​ошибка.

0 голосов
/ 03 октября 2018

В контроллере вы должны вставить контейнер в конструктор, а затем определить метод получения, чтобы получить ваш валидатор.проверьте эту ссылку , пока что в slim нет ничего похожего на symfony autowire, вам нужно явно внедрить контейнер и получить нужную вам услугу.Проверить этот код ниже поможет вам!

//use Psr\Container\ContainerInterface;


/**
 * @param ContainerInterface $container
 */
public function __construct(ContainerInterface $container)
{
    $this->container = $container;
}


//Then define a getter

/**
 * @return Validator
 */
protected function getValidator()
{
    if (!$this->validator instanceof Validator) {
        $this->validator = $this->container->get('Validator');
    }

    return $this->validator;
}


//Then access the validator
$this->getValidator()->validate...
...