У меня проблема с проверкой в потоке Typo3.
Я делаю запрос POST для REST, и это действие в контроллере для него.
/**
* 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
Если я не помещаю валидацию в функцию действия, я получаю сообщение валидации, но оно сохраняет в базе данных то, что не должно делать.
if ($result->hasErrors()) {
Здесь ваш объект имеет ошибки, имеет значение true, потому что по крайней мере одно из его свойств имеет ошибки (родитель уведомлен).
Но .. parent не хранит его в своем массиве ошибок — свойство делает — так что .. $result->getErrors()
пусто так же, как $result->getFirstError()
..
Чтобы получить доступ от родителя к свойствам ошибок, вы можете использовать:
$errors = $result->getFlattenedErrors();
или же
$result->forProperty('name')->getFirstError();
Других решений пока нет …