zend-framework2 - EntityManager persist 期望参数 1 是一个实体对象,NULL 给定 zend 教义
问题描述
我有这个 addaction 控制器,尽管正在添加用户,但我收到了这个异常错误。
public function addAction() {
$requestObj = $this->getRequest();
$viewModelObj = new ViewModel();
$errorMsg = array();
$userObj = new Entity\User();
try {
$userRepo = $this->getDoctrineRepository('User');
if ($this->getRequest()->getQuery('id')) {
$userObj = $userRepo->findOneBy(array('id'=>$this->getRequest()->getQuery('id')));
}
if ($requestObj->isPost()) {
$postData = $requestObj->getPost()->getArrayCopy();
$currentUser = $this->getFromSession('user');
$error = false;
if (trim($requestObj->getPost('firstName')) == "") {
$errorMsg[] = "First name is required";
$error = true;
}
if ($this->getRequest()->getQuery('id')) {
if($userObj->getCellPhone() != $postData['cellPhone']) {
if($userRepo->findOneBy(array('cellPhone'=> $postData['cellPhone']))) {
$errorMsg[] = "Cell Phone is already exists.";
$error = true;
}
}
} else {
$existUserByEmailObj = $userRepo->findOneBy(array('email'=> $postData['email']));
$existUserByCellObj = $userRepo->findOneBy(array('cellPhone'=> $postData['cellPhone']));
if($existUserByEmailObj){
$errorMsg[] = "Email is already exists.";
$error = true;
}
if($existUserByCellObj){
$errorMsg[] = "Cell Phone is already exists.";
$error = true;
}
}
if ($userObj->getId() && trim($requestObj->getPost('password')) == "") {
$postData['password'] = $userObj->getPassword();
} else if (trim($requestObj->getPost('password')) == "") {
// user add
$errorMsg[] = "Password is required";
$error = true;
}
// in edit if password is empty then insert previous password
// populate object with form data
$hydratorObj = new Hydrator\ClassMethods();
$hydratorObj->hydrate($postData, $userObj);
if($error == false) {
$userObj->setUpdatedBy($currentUser->getId());
$eMObj = $this->getDoctrineEntityManager();
if ($userObj->getId()) {
//$userObj->setIsVerified(2);
$eMObj->merge($userObj);
} else {
$userObj->setCreatedDate(new \DateTime("now"));
$userObj->setCreatedBy($currentUser->getId());
//$userObj->setIsVerified(2);
$eMObj->persist($userObj);
}
$eMObj->flush();
// Set User Sms Number
$userSmsNumberRepo = $this->getDoctrineRepository('UserSmsNumber');
$userSmsNumberObj = $userSmsNumberRepo->findOneBy(array('user'=> $userObj->getId()));
if(!$userSmsNumberObj) {
$smsNumberRepo = $this->getDoctrineRepository('SmsNumber');
$smsNumberObj = $smsNumberRepo->findSmsNumber();
if ($smsNumberObj) {
$userSmsNumberObj = new Entity\UserSmsNumber();
$userSmsNumberObj->setUser($userObj);
$userSmsNumberObj->setSmsNumber($smsNumberObj);
$smsNumberObj->setNoOfAssignee((int)$smsNumberObj->getNoOfAssignee() + 1);
}
$eMObj->persist($userSmsNumberObj);
$eMObj->merge($smsNumberObj);
$eMObj->flush();
// Send Email Alert to Admin if last one SmsNumber is exists.
$lastSmsNumber = $smsNumberRepo->lastOneSmsNumber();
if($lastSmsNumber == 0 || $lastSmsNumber == 1) {
$settingObj = $this->getDoctrineRepository('Setting');
$adminEmail = $settingObj->findValueByFieldName('ADMIN_EMAIL');
$sendArr = array($adminEmail => 'Fence-alert');
$placeholderArr = array('NAME' => 'Admin', 'SMSNUMBER' => $smsNumberObj->getSmsNumber(), 'NOOFASSIGNEE' => (int)$smsNumberObj->getNoOfAssignee());
$sendMailObj = new SendEmail($this->serviceLocator);
$sendMailObj->send($sendArr, 'SMSNUMBER_ALERT', $placeholderArr, $toAdmin = TRUE);
}
}
$this->flashMessenger()->addMessage('User Saved Successfully!');
$this->redirect()->toUrl(BASE_URL.'/admin/user');
}
}
$form = new UserForm($this->getServiceLocator(), 'formUser');
$form->bind($userObj);
$form->get('password')->setAttribute('type', 'text');
$form->get('password')->setValue($userObj->getPassword());
$viewModelObj->setVariables(array(
'errorMsg' => $errorMsg,
'form' => $form,
'userObj' => $userObj
));
return $viewModelObj;
} catch(\Exception $e) {
print_r($e);
$this->flashMessenger()->addMessage('Exception Error: User not saved.');
return $this->redirect()->toUrl(BASE_URL.'/admin/user');
}
}
错误:
Doctrine\ORM\ORMInvalidArgumentException Object ( [message:protected] => EntityManager#persist() expects parameter 1 to be an entity object, NULL given.
..................................................... ..................................................... ..................................................... ..................................................... ..................................................... .....................................
解决方案
我检查了代码,我认为问题可能是这样的:
- 在第 82 行检查 $userSmsNumberObj 是否是一个对象。如果为空,则在 if 语句中输入
- 在第 85 行检查 $smsNumberObj 是对象还是 null
- 如果 $smsNumberObj 为空,则跳转到第 92 行而不实例化新的 UserSmsNumber,并尝试保持空值
我认为您必须先检查 $userSmsNumberObj 是否是一个对象,然后再尝试在第 92 行保留。
推荐阅读
- linux - AWS Transcribe through AWS CLI
- c# - 有没有办法向矩形结构添加附加值?
- ruby-on-rails - Rails 验证 ASCII 近似值的唯一性
- css - _ngcontent-c0 being added to a css rule automatically
- amazon-cloudwatch - 用于 splunk 的 AWS 批处理日志
- openssl - OpenSSL pkcs12 export fails when specifying CSR file
- php - SQL injection vulnerability with prepared statement that uses concatenation
- java - NewsAPI Exclude Sources or Websites
- jquery - 烧瓶 jquery 停止刷新
- javascript - 我的路线不会渲染