2017-06-16 264 views
0

我在提交表单时出现此错误消息。注意:未定义索引

说明:未定义指数:标题中 C:\ XAMPP \ htdocs中\ ameyaw \模块\ BusinessGhana \ SRC \服务\ AutosManager.php 在线38

说明:未定义指数:描述在 C:\ XAMPP \ htdocs中\ ameyaw \模块\ BusinessGhana \ SRC \服务\ AutosManager.php 第39行上

说明:未定义指数:特色在 C:\ XAMPP \ htdocs中\ ameyaw \模块\ BusinessGhana \ SRC \ Service \ AutosManager.php on line 58

消息:

发生异常而执行 'INSERT INTO汽车(标题, 描述,特色,DATE_CREATED)VALUES(,,,????)' 使用参数 [NULL,NULL,NULL, “2017年6月15日5时04分44秒”]:

SQLSTATE [23000]:完整性约束违规:1048列 '标题' 不能为空

这是我的形式和字段集

use Zend\Form\Fieldset; 
use Doctrine\Common\Persistence\ObjectManager; 
use DoctrineModule\Persistence\ObjectManagerAwareInterface; 
use BusinessGhana\Entity\Autos; 

class AddFieldset extends Fieldset 
{ 

protected $objectManager; 

public function init() 
{ 

$this->add([   
    'type' => 'text', 
    'name' => 'title', 
    'attributes' => [ 
     'id' => 'autoTitle' 
    ], 
    'options' => [ 
     'label' => 'Title', 
     'display_empty_item' => true, 
     'empty_item_label' => 'Maximum of 60 characters', 
    ], 
]); 

$this->add([    
    'type' => 'textarea', 
    'name' => 'description', 
    'attributes' => [ 
     'id' => 'autoDescription' 
    ], 
    'options' => [ 
     'label' => 'Description', 
     'display_empty_item' => true, 
     'empty_item_label' => 'description', 
    ], 
]);    
$this->add([   
    'type' => 'radio', 
    'name' => 'featured', 
    'attributes' => [ 
     'id' => 'autoFeatured' 
    ], 
    'options' => array(
     'label' => 'Featured', 
     'value_options' => array(
      array('value' => '0', 
       'label' => 'No', 
       'selected' => true, 
       'label_attributes' => array(
        'class' => 'col-sm-2 btn btn-default', 
       ), 
      ), 
      array(
       'value' => '1', 
       'label' => 'Yes', 
       'label_attributes' => array(
        'class' => 'col-sm-2 btn btn-danger', 
       ), 
      ), 
     ), 
     'column-size' => 'sm-12', 
     'label_attributes' => array(
      'class' => 'col-sm-2', 
     ), 
    ), 
]); 

} 

}

use Zend\Form\Form; 
//use Zend\InputFilter\InputFilter; 


class AddForm extends Form 
{ 
public function init() 
{ 
$this->add([ 
    'name' => 'dependentForm', 
    'type' => AddFieldset::class, 

]); 

$this->add([ 
    'type' => 'submit', 
    'name' => 'submit', 
    'attributes' => [ 
     'value' => 'Submit', 
    ], 
]); 
} 
} 

这是我的控制器操作

public function addAction() 
{ 
// Create the form. 
$form = new PostForm(); 

if ($this->getRequest()->isPost()) { 

    // Get POST data. 
    $data = $this->params()->fromPost(); 

    // Fill form with data. 
    $form->setData($data); 
    if ($form->isValid()) { 

     // Get validated form data. 
     $data = $form->getData(); 
     $this->AutosManager->addNewAutos($data); 
     return $this->redirect()->toRoute('retrieve'); 
    } 
} 
return new ViewModel([ 
    'form' => $form 
]); 
} 

我知道水化可以解决这个问题,但我不知道如何使用它。 感谢您的任何帮助。

这是我autosManager

class AutosManager 
{ 
/** 
* Entity manager. 
* @var Doctrine\ORM\EntityManager; 
*/ 
private $entityManager; 

/** 
* Constructor. 
*/ 
public function __construct($entityManager) 
{ 
    $this->entityManager = $entityManager; 
} 

public function addNewAutos($data) 
{ 
    $autos = new Autos(); 
    $autos->setTitle($data['title']); 
    $autos->setDescription($data['description']); 
    $autos->setFeatured($data['featured']); 
    $currentDate = date('Y-m-d H:i:s'); 
    $autos->setDateCreated($currentDate);   

    $this->entityManager->persist($autos); 

    $this->entityManager->flush(); 
    } 
} 

我可以从数据库中检索数据。

这是我使我的形式:

  $form = $this->form; 
     $fieldset = $form->get('dependentForm'); 

     $title = $fieldset->get('title'); 
     $title->setAttribute('class', 'form-control'); 
     $title->setAttribute('placeholder', 'Maximum of 60 characters'); 
     $title->setAttribute('id', 'autoTitle'); 

     $description = $fieldset->get('description'); 
     $description->setAttribute('class', 'form-control'); 
     $description->setAttribute('placeholder', 'Description here...'); 
     $description->setAttribute('id', 'autoDescription'); 

     $featured = $fieldset->get('featured'); 
     $featured->setAttribute('id', 'autoRadio'); 

    $form->get('submit')->setAttributes(['class'=>'btn btn-primary']); 
     $form->prepare(); 
     echo $this->form()->openTag($form); 
     ?> 

     <fieldset> 

     <div class="form-group"> 
      <?= $this->formLabel($title) ?> 
      <?= $this->formElement($title) ?> 
<?= $this->formElementErrors()->render($title,['class'=>'help-block'])?> 
     </div> 

     <div class="form-group"> 
      <?= $this->formLabel($description) ?> 
      <?= $this->formElement($description) ?> 
<?=$this->formElementErrors()->render($description, 
    ['class'=>'help-block'])?> 
     </div> 

     <div class="form-group"> 
      <?= $this->formLabel($featured) ?> 
      <?= $this->formElement($featured) ?> 
    <?= $this->formElementErrors()->render($featured, 
    ['class' =>'help-block']) ?> 
     </div> 
     </div></div><div class="row"> 
      <div class="col-md-4"> 

     </fieldset> 
     <?= $this->formElement($form->get('submit')); ?> 
+0

我没有看到任何输入过滤器。显然,如果你不添加特定的验证,你的表单将是有效的。看看如何做到这一点教程:https://docs.zendframework.com/tutorials/getting-started/forms-and-actions/ – xtreamwayz

+0

你的错误是在你的文件'AutosManager.php':显示它。 –

+0

@AlFoиceѫ我添加了我的自动管理器 – dino

回答

0

在你的函数addNewAutos($data):你的$ data变量没有titledescriptionfeatured领域。所以PHP认为这些为null,并且您的$this->entityManager->flush()将尝试在数据库中写入空值,但是您至少有一个约束,即title不能为空。

所以检查$data数组包含titledescriptionfeatured领域之前,启动对Auto对象...

相关问题