php - Doctrine 2 - Magic getter on an ObjectSelect element using Zend Form -
when populating form element zend form using doctrines' objectselect
, property
parameter expects getpropertyname()
method within corresponding entity.
instead of creating getters each protected property within entity, able tell objectselect
use magic getter, e.x. __get('propertyname')
?
reason being if table has +100 columns, supposed create getters each, or can use magic getter populate form elements?
entity
namespace users\entity; use doctrine\orm\mapping orm; /** * @orm\entity * @orm\table(name="tbl_users") * @property int $id * @property string $firstname */ class user{ /** * @orm\id * @orm\column(type="integer"); * @orm\generatedvalue(strategy="auto") */ protected $id; /** * @orm\column(type="string") */ protected $firstname; /** * exposes protected properties * * @param string $prop */ public function __get($prop){ return $this->$prop; } /** * saves protected properties * * @param string $prop * @param mixed $val */ public function __set($prop, $val){ $this->$prop = $val; } }
form
namespace users\form; use zend\form\form; use doctrinemodule\stdlib\hydrator\doctrineobject doctrinehydrator; use doctrinemodule\persistence\objectmanagerawareinterface; use doctrine\common\persistence\objectmanager; use doctrine\orm\entitymanager; class userform extends form implements objectmanagerawareinterface{ protected $em; public function __construct(entitymanager $em, $name = null){ parent::__construct('edit user'); $hydrator = new doctrinehydrator($em, 'users\entity\user'); $this->sethydrator($hydrator); $this->add(array( 'type' => 'doctrinemodule\form\element\objectselect', 'name' => 'firstname', 'options' => array( 'object_manager' => $em, 'target_class' => 'users\entity\user', 'property' => 'firstname' ) )); }
since went unanswered, believe trick set "byvalue" false in doctrinehydrator constructor.
$hydrator = new doctrinehydrator($em, 'users\entity\user', false);
by default byvalue true , instructs doctrine use getproperty() methods.
Comments
Post a Comment