【发布时间】:2018-10-03 10:23:00
【问题描述】:
尊重\验证\验证器。我有一个验证器类 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 格式返回验证错误。
【问题讨论】:
-
您需要从容器中将
$this->validator设置为您的验证器。它是空的,所以我猜你没有这样做 -
saverUserDetails方法从何而来?请添加更多代码。我认为问题在于,您无法在saveUserDetails方法中访问容器。 -
我正在从路由中调用 saveUserDetails 方法。我也更新了该代码。
-
好的,请出示您的
CompanyController班级。我认为会有问题。 -
我已经更新了我的问题。因为容器概念有点混乱。所以我删除了这个。我已经把我的控制器代码。