Typo3流程验证错误

时间:2014-11-16 15:49:11

标签: php validation typo3 typo3-flow

我在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行

如果我没有在动作函数中放置验证,那么我会得到验证消息,但它会将数据保存到数据库中。

1 个答案:

答案 0 :(得分:0)

if ($result->hasErrors()) {

这里你的对象有错误是真的,因为它的至少一个属性有错误(父通知)。

但是..父亲不将它存储在他的错误数组中 - 属性确实如此 - 所以.. $result->getErrors()是空的$result->getFirstError() ..

要从父级访问属性错误,您可以使用:

$errors = $result->getFlattenedErrors();

$result->forProperty('name')->getFirstError();