Работа с Doctrine 2 в Zend Framework 2 Form и fieldset с использованием DoctrineHydrator
Клиентский объект
<?php
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Client
*
* @ORM\Table(name="client", uniqueConstraints={@ORM\UniqueConstraint(name="mail", columns=
* {"mail"}), @ORM\UniqueConstraint(name="pseudo", columns={"pseudo"})}, indexes=
* {@ORM\Index(name="FK_client_situation", columns={"situation"}),
*@ORM\Index(name="FK_client_city", columns={"ville"})})
* @ORM\Entity
*/
class Client
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="firstname", type="string", length=255, nullable=true)
*/
private $firstname;
/**
* @var string
*
* @ORM\Column(name="lastname", type="string", length=255, nullable=true)
*/
private $lastname;
/**
* @var \DateTime
*
* @ORM\Column(name="birthay", type="datetime", nullable=true)
*/
private $birthay;
/**
* @var string
*
* @ORM\Column(name="mail", type="string", length=255, nullable=true)
*/
private $mail;
/**
* @var string
*
* @ORM\Column(name="phone", type="text", nullable=true)
*/
private $phone;
/**
* @var string
*
* @ORM\Column(name="pseudo", type="string", length=255, nullable=true)
*/
private $pseudo;
/**
* @var string
*
* @ORM\Column(name="password", type="string", length=255, nullable=true)
*/
private $password;
/**
* @var integer
*
* @ORM\Column(name="situation", type="integer", nullable=true)
*/
private $situation;
/**
* @var integer
*
* @ORM\Column(name="ville", type="integer", nullable=true)
*/
private $ville;
/**
* @var string
*
* @ORM\Column(name="facebook", type="string", length=255, nullable=true)
*/
private $facebook;
/**
* @var string
*
* @ORM\Column(name="picture", type="string", length=255, nullable=true)
*/
private $picture;
/**
* @var integer
*
* @ORM\Column(name="newseltter", type="integer", nullable=true)
*/
private $newseltter;
/**
* @var \DateTime
*
* @ORM\Column(name="dateinscription", type="datetime", nullable=true)
*/
private $dateinscription;
/**
* @var \DateTime
*
* @ORM\Column(name="datedelete", type="datetime", nullable=true)
*/
private $datedelete;
/**
* @var string
*
* @ORM\Column(name="statut", type="string", length=50, nullable=true)
*/
private $statut;
/**
* @var string
*
* @ORM\Column(name="contenu", type="text", nullable=true)
*/
private $contenu;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set firstname
*
* @param string $firstname
* @return Client
*/
public function setFirstname($firstname)
{
$this->firstname = $firstname;
return $this;
}
/**
* Get firstname
*
* @return string
*/
public function getFirstname()
{
return $this->firstname;
}
/**
* Set lastname
*
* @param string $lastname
* @return Client
*/
public function setLastname($lastname)
{
$this->lastname = $lastname;
return $this;
}
/**
* Get lastname
*
* @return string
*/
public function getLastname()
{
return $this->lastname;
}
/**
* Set birthay
*
* @param \DateTime $birthay
* @return Client
*/
public function setBirthay($birthay)
{
$this->birthay = $birthay;
return $this;
}
/**
* Get birthay
*
* @return \DateTime
*/
public function getBirthay()
{
return $this->birthay;
}
/**
* Set mail
*
* @param string $mail
* @return Client
*/
public function setMail($mail)
{
$this->mail = $mail;
return $this;
}
/**
* Get mail
*
* @return string
*/
public function getMail()
{
return $this->mail;
}
/**
* Set phone
*
* @param string $phone
* @return Client
*/
public function setPhone($phone)
{
$this->phone = $phone;
return $this;
}
/**
* Get phone
*
* @return string
*/
public function getPhone()
{
return $this->phone;
}
/**
* Set pseudo
*
* @param string $pseudo
* @return Client
*/
public function setPseudo($pseudo)
{
$this->pseudo = $pseudo;
return $this;
}
/**
* Get pseudo
*
* @return string
*/
public function getPseudo()
{
return $this->pseudo;
}
/**
* Set password
*
* @param string $password
* @return Client
*/
public function setPassword($password)
{
$this->password = $password;
return $this;
}
/**
* Get password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Set situation
*
* @param integer $situation
* @return Client
*/
public function setSituation($situation)
{
$this->situation = $situation;
return $this;
}
/**
* Get situation
*
* @return integer
*/
public function getSituation()
{
return $this->situation;
}
/**
* Set ville
*
* @param integer $ville
* @return Client
*/
public function setVille($ville)
{
$this->ville = $ville;
return $this;
}
/**
* Get ville
*
* @return integer
*/
public function getVille()
{
return $this->ville;
}
/**
* Set facebook
*
* @param string $facebook
* @return Client
*/
public function setFacebook($facebook)
{
$this->facebook = $facebook;
return $this;
}
/**
* Get facebook
*
* @return string
*/
public function getFacebook()
{
return $this->facebook;
}
/**
* Set picture
*
* @param string $picture
* @return Client
*/
public function setPicture($picture)
{
$this->picture = $picture;
return $this;
}
/**
* Get picture
*
* @return string
*/
public function getPicture()
{
return $this->picture;
}
/**
* Set newseltter
*
* @param integer $newseltter
* @return Client
*/
public function setNewseltter($newseltter)
{
$this->newseltter = $newseltter;
return $this;
}
/**
* Get newseltter
*
* @return integer
*/
public function getNewseltter()
{
return $this->newseltter;
}
/**
* Set dateinscription
*
* @param \DateTime $dateinscription
* @return Client
*/
public function setDateinscription($dateinscription)
{
$this->dateinscription = $dateinscription;
return $this;
}
/**
* Get dateinscription
*
* @return \DateTime
*/
public function getDateinscription()
{
return $this->dateinscription;
}
/**
* Set datedelete
*
* @param \DateTime $datedelete
* @return Client
*/
public function setDatedelete($datedelete)
{
$this->datedelete = $datedelete;
return $this;
}
/**
* Get datedelete
*
* @return \DateTime
*/
public function getDatedelete()
{
return $this->datedelete;
}
/**
* Set statut
*
* @param string $statut
* @return Client
*/
public function setStatut($statut)
{
$this->statut = $statut;
return $this;
}
/**
* Get statut
*
* @return string
*/
public function getStatut()
{
return $this->statut;
}
/**
* Set contenu
*
* @param string $contenu
* @return Client
*/
public function setContenu($contenu)
{
$this->contenu = $contenu;
return $this;
}
/**
* Get contenu
*
* @return string
*/
public function getContenu()
{
return $this->contenu;
}
}
?>
ClienFieldset
<?php
namespace Application\Form;
use Application\Entity\Client;
use Doctrine\Common\Persistence\ObjectManager;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Fieldset;
use Zend\InputFilter\InputFilterProviderInterface;
class ClientFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('post');
//$em = Registry::get('entityManager');
$this->setHydrator(new DoctrineHydrator($objectManager,'Application\Entity\Client'))
->setObject(new Client());
$this->setLabel('Post');
$this->add(array(
'name' => 'id',
'attributes' => array(
'type' => 'hidden'
)
));
$this->add(array(
'name' => 'mail',
'options' => array(
'label' => 'Title for this Post'
),
'attributes' => array(
'type' => 'text'
)
));
$this->add(array(
'name' => 'password',
'options' => array(
'label' => 'Text-Content for this post'
),
'attributes' => array(
'type' => 'text'
)
));
}
/**
* Define InputFilterSpecifications
*
* @access public
* @return array
*/
public function getInputFilterSpecification()
{
return array(
'mail' => array(
'required' => true,
'filters' => array(
array('name' => 'StringTrim'),
array('name' => 'StripTags')
),
'properties' => array(
'required' => true
)
),
'password' => array(
'required' => true,
'filters' => array(
array('name' => 'StringTrim'),
array('name' => 'StripTags')
),
'properties' => array(
'required' => true
)
)
);
}
}
?>
Форма клиента
<?php
namespace Application\Form;
use Doctrine\Common\Persistence\ObjectManager;
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
use Zend\Form\Form;
class ClientForm extends Form
{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('post');
// The form will hydrate an object of type "BlogPost"
$this->setHydrator(new DoctrineHydrator($objectManager));
// Add the user fieldset, and set it as the base fieldset
$clientFieldset = new ClientFieldset($objectManager);
$clientFieldset->setUseAsBaseFieldset(true);
$this->add($clientFieldset);
$this->add(array(
'name' => 'security',
'type' => 'Zend\Form\Element\Csrf'
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Go',
'id' => 'submitbutton'
)
));
$this->setValidationGroup(array(
'security',
'post' => array(
'title',
'text'
)
));
}
}
?>
Индекс Действие
<?php
public function indexAction()
{
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
// Create the form and inject the ObjectManager
$form = new ClientForm($objectManager);
// Create a new, empty entity and bind it to the form
$Client = new Client();
$form->bind($Client);
if ($this->request->isPost()) {
$form->setData($this->request->getPost());
if ($form->isValid()) {
$objectManager->persist($Client);
$objectManager->flush();
}
}
return array('form' => $form);
}
?>
#index View
<table class="table">
<?php
if($this->form){
echo $this->form()->openTag($form);
echo $this->formRow($form->get('id'));
echo $this->formRow($form->get('mail'));
echo $this->form()->closeTag();
}
</table> ?>
Когда я выполняю мой код, я получаю эту ошибку..
Предупреждение: include(/var/www/Colocation/Colocation/module/Visitor/config/../view/error/index.phtml): не удалось открыть поток: нет такого файла или каталога в /var/www/Colocation/Colocation/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php в строке 506
Предупреждение: include(): Не удалось открыть '/var/www/Colocation/Colocation/module/Visitor/config/../view/error/index.phtml' для включения (include_path='.:/ Usr/share/php:/usr/share/pear') в /var/www/Colocation/Colocation/vendor/zendframework/zendframework/library/Zend/View/Renderer/PhpRenderer.php в строке 506
Пожалуйста, помогите мне!
1 ответ
Предупреждение php говорит, что не может найти файл error/index.phtml.
Он ищет этот файл, потому что где-то в вашем коде есть ошибка, которая может привести к появлению страницы ошибки.
Файлы страниц ошибок по умолчанию находятся в модуле приложения (модуль / Приложение / представление / ошибка /), но в вашем случае он пытается найти эти файлы в модуле "Посетитель".
Возможно, в модуле "Посетитель" вы перезаписали конфиги модуля "view_manager" приложения, так что вы можете попробовать ОДИН из следующих:
Откройте файл конфигурации модуля "Посетитель" и прокомментируйте или удалите все конфиги, связанные с ошибками, достаточно использовать эту конфигурацию для "view_manager"
'view_manager' => array( 'template_path_stack' => array( 'visitor' =>
__DIR__
, '/../Посмотреть',),),Создайте шаблоны страниц с ошибками в модуле "Посетитель", подобные тем, которые вы можете найти в модуле "Приложения". Делайте это только в том случае, если вы хотите настроить шаблон страницы ошибок, оставив без изменений шаблон ошибки приложения, в противном случае используйте первое решение.
После завершения вы сможете увидеть еще одну ошибку, но на этот раз связанную с вашим кодом!