Работа с Doctrine 2 в Zend Framework 2 Form и набором полей с помощью 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

Пожалуйста, помогите мне!


person user3162171    schedule 24.04.2014    source источник


Ответы (1)


Предупреждение php говорит, что он не может найти файл error/index.phtml.

Он ищет этот файл, потому что где-то в вашем коде есть ошибка, которая приведет к странице с ошибкой.

Файлы страницы ошибок по умолчанию находятся в модуле приложения (module/Application/view/error/), но в вашем случае он пытается найти эти файлы в модуле «Посетитель».

Возможно, в модуле «Посетитель» вы перезаписали конфиги модуля приложения «view_manager», поэтому вы можете попробовать ОДНО из следующего:

  • Откройте файл конфигурации модуля «Посетитель» и прокомментируйте или удалите все конфигурации, связанные с ошибками, использования этой конфигурации для «view_manager» должно быть достаточно.

    'view_manager' => array( 'template_path_stack' => array( 'visitor' => __DIR__ . '/../представление', ), ),

  • Создайте шаблоны страниц ошибок в модуле «Посетитель», подобные тем, которые вы можете найти в модуле «Приложение». Делайте это только в том случае, если вы хотите настроить шаблон страницы ошибки, оставив без изменений шаблон ошибки приложения, в противном случае используйте первое решение.

После того, как вы закончите, вы сможете увидеть еще одну ошибку, но на этот раз связанную с вашим кодом!

person Sergio Rinaudo    schedule 25.04.2014