我在Typo3流程中验证有问题。
我正在对REST进行POST请求,这是控制器中的操作。
/**
* Create Customer
*
*
* @param int $clientId
* @param string $name
* @param string $phone
* @param string $mail
* @param string $zip
* @param string $city
* @param int countryId
* @return string
*/
public function createAction($clientId, $name, $phone, $mail, $zip, $city, $countryId) {
try{
$this->checkAccessArgs();
$client = $this->clientCustomerRepository->getReference('\Shopbox\API\Domain\Model\Client',$clientId);
$country = $this->clientCustomerRepository->getReference('\Shopbox\API\Domain\Model\Country',$countryId);
$newCustomer = new ClientCustomer();
$newCustomer->setClient($client);
$newCustomer->setCountry($country);
$newCustomer->setName($name);
$newCustomer->setPhone($phone);
$newCustomer->setMail($mail);
$newCustomer->setZip($zip);
$newCustomer->setCity($city);
$newCustomer->setCrdate(time());
$newCustomer->setTstamp(time());
$newCustomer->setDeleted(0);
$newCustomer->setHidden(0);
$customerValidator = $this->validatorResolver->getBaseValidatorConjunction('\Shopbox\API\Domain\Model\ClientCustomer');
$result = $customerValidator->validate($newCustomer);
if($result->hasErrors()){
throw new \Exception($result->getFirstError()->getMessage() ,$result->getFirstError()->getCode());
}
$this->clientCustomerRepository->add($newCustomer);
$this->persistenceManager->persistAll();
$this->response->setStatus(201);
$this->view->setVariablesToRender(array(self::JSON_RESPONSE_ROOT_SINGLE));
$this->view->assign(self::JSON_RESPONSE_ROOT_SINGLE,
array(self::JSON_RESPONSE_ROOT_SINGLE=> $newCustomer)
);
}
catch(\Exception $e){
$this->response->setStatus($e->getCode());
return $this->assignError($e->getMessage());
}
}
这是我在模型中验证的方式。
/**
* @var string
* @Flow\Validate(type="EmailAddress")
*/
protected $mail;
/**
* @var string
* @Flow\Validate(type="StringLength", options={ "minimum"=8, "maximum"=8 })
*/
protected $phone;
我得到的错误就是这个。
致命错误:在非对象中调用成员函数getMessage() /path_to_project/flow2/Data/Temporary/Development/Cache/Code/Flow_Object_Classes/path_to_Controller.php 第87行
如果我没有在动作函数中放置验证,那么我会得到验证消息,但它会将数据保存到数据库中。
答案 0 :(得分:0)
if ($result->hasErrors()) {
这里你的对象有错误是真的,因为它的至少一个属性有错误(父通知)。
但是..父亲不将它存储在他的错误数组中 - 属性确实如此 - 所以.. $result->getErrors()
是空的$result->getFirstError()
..
要从父级访问属性错误,您可以使用:
$errors = $result->getFlattenedErrors();
或
$result->forProperty('name')->getFirstError();