1

如何将 POST 数据绑定到对象可以保存或编辑到 Doctrine。

我将 Doctrine 与注释实体一起使用。我不知道将数组数据绑定到实体。

我也读到了 Symfony 的独立组件。

例子 :

$_POST # form data , array

# this is how doctrine save object
$product = new Product();
$product->setName('product1');
$entityManager->persist($product);
$entityManager->flush();

我想 $product = $helper->convert($_POST, ...) # return product object 然后我可以将 $product 持久化到 $entityManager。

4

2 回答 2

2

这将帮助您如何处理表单: http ://symfony.com/doc/current/book/forms.html

将数据放在实体用户的设置器上。

$entity->setName('Mitchel');

如果要在实体上发布帖子,则必须创建如下函数:

    public function setAttributes( array $values )
    {
        foreach( $values as $attribute => $value ) {
            $dateEng = "/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/";
            $dateNl  = "/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/";
            if( preg_match ($dateEng, $value) OR preg_match ($dateNl, $value) ){
                $value = date_create( $value );
            }

            if(is_string( $value )){
                if(preg_match( '/^\d+$/', $value )){
                    $value = (int) $value;
                }
            }

            $this->{'set' . ucfirst( $attribute )}( $value );
        }

        return $this;
    }

这对我有用 =) 如果我发现一个不起作用的案例,我只需添加一些代码。

于 2012-09-18T13:24:24.317 回答
2

如果您决定采用这种方式,则应首先使用ClassMetadata类来确定字段名称,否则当用户发布额外数据时,您将收到“PHP 致命错误:调用未定义方法...”。

像这样的东西:

<?php 
function setAttributes($values) {
$cm = new ClassMetadata(__CLASS__);
foreach ($cm->getFieldNames() as $field) { 
  if (array_key_exists($values, $field))
    $this->{'set' . ucfirst( $attribute )}( $value );
// ...

但我强烈建议你学习表单组件。我只花了一天的时间就开始制作复杂的表格,大约花了一周的时间。

于 2012-09-18T22:53:22.953 回答