Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2-用于条令和注释表单的神奇Getter和Setter_Php_Doctrine Orm_Zend Framework2_Zend Db_Magic Methods - Fatal编程技术网

Php Zend Framework 2-用于条令和注释表单的神奇Getter和Setter

Php Zend Framework 2-用于条令和注释表单的神奇Getter和Setter,php,doctrine-orm,zend-framework2,zend-db,magic-methods,Php,Doctrine Orm,Zend Framework2,Zend Db,Magic Methods,我读到一个神奇的getter-and-setter函数,它取代了大量的标准getter和setter。() 我更改了Miles的函数,因为我使用的是注释表单,不希望在变量中使用下划线,如$\u name。我更新了魔法函数,但当尝试调用例如getName()时,我得到: 致命错误:调用未定义的方法。。。实体::getName() 这是我的密码: <?php namespace Entity; use Doctrine\ORM\Mapping as ORM; use Zend\Form\Ann

我读到一个神奇的getter-and-setter函数,它取代了大量的标准getter和setter。()

我更改了Miles的函数,因为我使用的是
注释表单
,不希望在变量中使用下划线,如
$\u name
。我更新了魔法函数,但当尝试调用例如
getName()
时,我得到:

致命错误:调用未定义的方法。。。实体::getName()

这是我的密码:

<?php
namespace Entity;
use Doctrine\ORM\Mapping as ORM;
use Zend\Form\Annotation as Form;

/**
 * @ORM\Entity
 * @ORM\Table(name="masterdata_entity")
 * @Form\Name("entity")
 * @Form\Attributes({ "class": "form-horizontal" })
 * @Form\Hydrator("Zend\Stdlib\Hydrator\ObjectProperty")
*/
class Entity
{
  /**
   * @ORM\Id
   * @ORM\Column(type="integer")
   * @ORM\GeneratedValue(strategy="AUTO")
   * @Form\Exclude()
   */
  protected $id;
  /**
   * @ORM\Column(type="string")
   * @Form\Filter({"name":"StringTrim"})
   * @Form\Validator({"name":"StringLength", "options":{"min":1, "max":50}})
   * @Form\Attributes({"type":"text"})
   * @Form\Options({"label":"Name"})
   */
  protected $name;

public function __get($property) {
    return (isset($this->{$property}) ? $this->{$property} : null);
}

public function __set($property, $value) {
    if (isset($this->{$property})) {
        $this->{$property} = $value;
    }
}

public function __isset($property) {
    return isset($this->{$property});
}

}

我想我的评论是对的。检查,您将看到它基本上使用。查看
extract()
-函数,您可以看到所有类方法都将在

看一看,您会发现只有默认的getter
getX、hasX、isX
才是有效的:

if (!preg_match('/^(get|has|is)[A-Z]\w*/', $method)) {
    continue;
}

这最终意味着,你将永远要写你的二传手和后传手。即使文件大小可能会变大一点。这对于普通的IDE更好,而且它也是一个性能提升,即使文件大小也是如此。

请提供您的实体代码,这是需要的部分:D实际上,我刚刚想到的是,我认为水合器不适用于神奇的功能。他们需要实际的getter和setter才能调用。Iirc,他们检查函数是否存在请查看更新的注释,但我会检查它,因为您需要定义
\u set()
\u get()
魔术方法。这也不是Zend或条令式的方法,而是。谢谢。实现了自己的setter后,编辑变量时会出现以下错误:
致命错误:无法访问受保护的属性
。我的属性受到保护,几乎每个示例都显示了这一点。。。你知道我做错了什么吗?当然,你使用的是
\Zend\Stdlib\Hydrator\ObjectProperty
。由于您使用的是DoctrineTities,因此要使用的正确水合器应该是
\DoctrineModule\Stdlib\Hydrator\DoctrineObject
谢谢。。。但现在我得到了以下信息:
Catchable致命错误:传递给DoctrineModule\Stdlib\Hydrator\DoctrineObject的参数1::\uu construct()必须实现接口条令\Common\Persistence\ObjectManager,未给出,在第566行的…\vendor\zendframework\zendframework\library\Zend\Form\Factory.php中调用,并在第63行的…\vendor\doctrine\DoctrineModule\src\DoctrineModule\Stdlib\Hydrator\DoctrineObject.php中定义。我的教义版本至少应该设置为v2.1Ah是的,关于这个,呃。。。DoctrineObject或需要ObjectManager/EntityManager作为参数。我不知道如何使用AnnotationForms实现这一点。也许可以尝试使用classor方法。它可能也有用,但我真的不太了解注释形式。我手工创建表格我在这里新开了一期:
if (!preg_match('/^(get|has|is)[A-Z]\w*/', $method)) {
    continue;
}