Symfony2 entity
A controllerek rész után az entity-k következnek. Doctrine orm használatával kezeljük az entity-ket. |
|
Ha vannak tábláink az adatbázisban, akkor már az ismertetett módon tudunk egyszerűen entity-ket generálni: http://itgyor.com/content/symfony2_hasznalata A példákat egy kicsit megkellett kurtítani, mert túl hosszúak lettek. Két helyen elkellett törni a sort, mert nem fért ki itt a neten. Ha már van egy bundle-ünk pl: # php app/console generate:bundle --namespace=Web/NewsBundle Akkor importáljunk az adatbázisból: # php app/console doctrine:mapping:import --force WebNewsBundle xml Ekkor a /src/Web/NewsBundle/Resources/config/doctrine/News.orm.xml fájl jön létre(feltéve ha csak egy News táblánk volt). Ekkor egy xml fájlt fog készíteni a doctrine, a táblák paramétereivel. Ennek a tartalma kb így fog kinézni: <?xml version="1.0" encoding="utf-8"?> <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"> <entity name="Web\NewsBundle\Entity\News" table="news"> <indexes> <index name="group" columns="group_id"/> <index name="user_id" columns="user_id"/> </indexes> <id name="id" type="integer" column="id"> <generator strategy="IDENTITY"/> </id> <field name="titleHu" type="string" column="title_hu" length="255" nullable="false"/> <field name="messageHu" type="text" column="message_hu" length="65535" nullable="false"/> <field name="date" type="datetime" column="date" nullable="false"/> <field name="status" type="string" column="status" length="100" nullable="false"/> <many-to-one field="user" target-entity="Users"> <join-columns> <join-column name="user_id" referenced-column-name="id"/> </join-columns> </many-to-one> <many-to-one field="group" target-entity="NewsGroup"> <join-columns> <join-column name="group_id" referenced-column-name="id"/> </join-columns> </many-to-one> </entity> </doctrine-mapping> Ezután a következő parancsot adjuk ki: # php app/console doctrine:mapping:convert annotation ./src Ekkor létrejönnek az Entity mappában a fájlok az xml-ekből generálva, elkészül az orm model, pl a News.php néven ilyen generált tartalommal: <?php namespace Web\NewsBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * News * * @ORM\Table(name="news", indexes={@ORM\Index(name="group", columns={"group_id"}), ( <- sortörés) @ORM\Index(name="user_id", columns={"user_id"})}) * @ORM\Entity */ class News { /** * @var string * * @ORM\Column(name="title_hu", type="string", length=255, nullable=false) */ private $titleHu; /** * @var string * * @ORM\Column(name="message_hu", type="text", length=65535, nullable=false) */ private $messageHu; /** * @var \DateTime * * @ORM\Column(name="date", type="datetime", nullable=false) */ private $date; /** * @var string * * * @ORM\Column(name="status", type="string", length=100, nullable=false) */ private $status; /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var \Web\NewsBundle\Entity\Users * * @ORM\ManyToOne(targetEntity="Web\NewsBundle\Entity\Users") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="user_id", referencedColumnName="id") * }) */ private $user; /** * @var \Web\NewsBundle\Entity\NewsGroup * * @ORM\ManyToOne(targetEntity="Web\NewsBundle\Entity\NewsGroup") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="group_id", referencedColumnName="id") * }) */ private $group; }Adjuk ki a következő parancsot amivel legeneráljuk a get/set metódusokat: # php app/console doctrine:generate:entities WebNewsBundle <?php namespace Web\News2Bundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * News * * @ORM\Table(name="news", indexes={@ORM\Index(name="group", columns={"group_id"}), (<-sortörés) @ORM\Index(name="user_id", columns={"user_id"})}) * @ORM\Entity */ class News { /** * @var string * * @ORM\Column(name="title_hu", type="string", length=255, nullable=false) */ private $titleHu; /** * @var string * * @ORM\Column(name="message_hu", type="text", length=65535, nullable=false) */ private $messageHu; /** * @var \DateTime * * @ORM\Column(name="date", type="datetime", nullable=false) */ private $date; /** * @var string * * @ORM\Column(name="status", type="string", length=100, nullable=false) */ private $status; /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var \Web\News2Bundle\Entity\Users * * @ORM\ManyToOne(targetEntity="Web\News2Bundle\Entity\Users") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="user_id", referencedColumnName="id") * }) */ private $user; /** * @var \Web\News2Bundle\Entity\NewsGroup * * @ORM\ManyToOne(targetEntity="Web\News2Bundle\Entity\NewsGroup") * @ORM\JoinColumns({ * @ORM\JoinColumn(name="group_id", referencedColumnName="id") * }) */ private $group; /** * Set titleHu * * @param string $titleHu * @return News */ public function setTitleHu($titleHu) { $this->titleHu = $titleHu; return $this; } /** * Get titleHu * * * @return string */ public function getTitleHu() { return $this->titleHu; } /** * Set messageHu * * @param string $messageHu * @return News */ public function setMessageHu($messageHu) { $this->messageHu = $messageHu; return $this; } /** * Get messageHu * * @return string */ public function getMessageHu() { return $this->messageHu; } /** * Set date * * @param \DateTime $date * @return News */ public function setDate($date) { $this->date = $date; return $this; } /** * Get date * * @return \DateTime */ public function getDate() { return $this->date; } /** * Set status * * @param string $status * @return News */ public function setStatus($status) { $this->status = $status; return $this; } /** * Get status * * @return string */ public function getStatus() { return $this->status; } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set user * * @param \Web\News2Bundle\Entity\Users $user * @return News */ public function setUser(\Web\News2Bundle\Entity\Users $user = null) { $this->user = $user; return $this; } /** * Get user * * @return \Web\News2Bundle\Entity\Users */ public function getUser() { return $this->user; } /** * Set group * * @param \Web\News2Bundle\Entity\NewsGroup $group * @return News */ public function setGroup(\Web\News2Bundle\Entity\NewsGroup $group = null) { $this->group = $group; return $this; } /** * Get group * * @return \Web\News2Bundle\Entity\NewsGroup */ public function getGroup() { return $this->group; } } Ebben a lépésben az előbb készült News.php fájlból készül egy News.php~ fájl és lesz egy új News.php fájl, amiben már benne lesznek a get/set metódusok. Ezzel készen is vagyunk az adatbázisunk orm modeljének elkészítésével ilyen egyszerűen. Generálhatunk crud-ot: # php app/console generate:doctrine:crud és ezzel létrejönnek a controllerek, view-ok stb. Lehetőségünk van arra is, hogy a symfony2-vel módosítsuk az adatbázisban a táblákat. Ehhez Resources/config/doctrine/ mappában kell .orm.xml fájlt kell készítenünk és a hozzátartozó php-s entity fájlt is megkell írnunk az Entity mappában. Ezután kiadhatjuk a következő parancsot: # php app/console doctrine:schema:update --force Ezzel módosulnak a tábláink az adatbázisban, ne felejtsük el, hogy a többi generált fájlunk view/controller/stb. is elavult lesz és módosítanunk kell őket, vagy újra legenerálni. http://symfony.com/doc/current/book/doctrine.html https://nyukapiszka.wordpress.com/2011/08/06/symfony-2-telepites-bundle-keszites-crud-alapok-es-egyebek-minden-az-egyben/ |
2014.11.30. |
Figyelem! Az itt olvasható leírások, nem teljesek és nem biztos, hogy pontosak. Nem
frissülnek folyamatosan, ezért nem mindegyik használható az aktuális verziójú rendszerekben. Mindenki saját
felelősségére használja az itt található ötleteket. Az esetleges károkért nem vállalunk felelősséget.