2014-01-13 4 views
0

Я новичок в Symfony2, и у меня есть вопрос, который я не мог полностью решить сам. Я программирую приложение и использую клиентский интерфейс и проект. Каждый проект имеет одного клиента, и каждый клиент может иметь несколько проектов.Как получить данные с другого контроллера Symfony2

Автономный дисплей клиентов и проектных таблиц уже работает, но у меня также есть отображение проектов в интерфейсе клиентов. Я уже пробовал несколько способов сделать это, но пока у меня не было никакого успеха.

Не могли бы вы рассказать мне, что мне нужно поместить в свой ClientController-, config.yml и routing.yml-File, чтобы отображать проектные таблицы в файле show.html.twig для клиента ?

Я заранее благодарю Вас за ответ

Адрес: http://dev.pingag.ch/Symfony/web/app_dev.php/clients/

ClientController.php

namespace Acme\KeywordBundle\Controller; 

    use Symfony\Component\HttpFoundation\Request; 
    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 
    use Acme\KeywordBundle\Entity\Client; 
    use Acme\KeywordBundle\Entity\Project; 
    use Acme\KeywordBundle\Form\ClientType; 

/** 
* Client controller. 
* 
* @Route("/clients") 
*/ 
class ClientController extends Controller 
{ 


    /** 
    * Lists all Client entities. 
    * 
    * @Route("/", name="clients") 
    * @Method("GET") 
    * @Template() 
    */ 
    public function indexAction() 
    { 
     $em = $this->getDoctrine()->getManager(); 

     $entities = $em->getRepository('AcmeKeywordBundle:Client')->findAll(); 

     return array(
      'entities' => $entities, 
     ); 

    } 


    ... 
    ... 
    ... 
} 

config.yml

imports: 
- { resource: parameters.yml } 
- { resource: security.yml } 
... 
... 
... 

routing.yml

acme_keyword: 
resource: "@AcmeKeywordBundle/Controller" 
type:  annotation 

client.php

<?php 

namespace Acme\KeywordBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* Client 
* 
* @ORM\Table() 
* @ORM\Entity 
*/ 
class client 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=true) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    // Anfang Kopiert von Anleitung 

    /** 
    * @ORM\OneToMany(targetEntity="Project", mappedBy="client") 
    */ 
    protected $projects; 

    /** 
    * @ORM\OneToMany(targetEntity="File", mappedBy="client") 
    */ 
    protected $files; 

     /** 
    * @ORM\OneToMany(targetEntity="Contact", mappedBy="client") 
    */ 
    protected $contacts; 

    public function __construct() 
    { 
     $this->projects = new ArrayCollection(); 
     $this->files = new ArrayCollection(); 
     $this->contacts = new ArrayCollection(); 
    } 


    // Ende Kopiert von Anleitung 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=true) 
    * @Assert\NotBlank() 
    */ 
    private $name; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="createdAt", type="datetime", nullable=true) 
    */ 
    private $createdAt; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="updatedAt", type="datetime", nullable=true) 
    */ 
    private $updatedAt; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="logoFileName", type="string", length=255, nullable=true) 
    */ 
    private $logoFileName; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="logoContentType", type="string", length=255, nullable=true) 
    */ 
    private $logoContentType; 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="logoFileSize", type="integer", nullable=true) 
    */ 
    private $logoFileSize; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="logoUpdatedAt", type="datetime", nullable=true) 
    */ 
    private $logoUpdatedAt; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return Client 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set createtAt 
    * 
    * @param \DateTime $createtAt 
    * @return Client 
    */ 
    public function setCreatetAt($createtAt) 
    { 
     $this->createtAt = $createtAt; 

     return $this; 
    } 

    /** 
    * Get createtAt 
    * 
    * @return \DateTime 
    */ 
    public function getCreatetAt() 
    { 
     return $this->createtAt; 
    } 

    /** 
    * Set updatetAt 
    * 
    * @param \DateTime $updatetAt 
    * @return Client 
    */ 
    public function setUpdatetAt($updatetAt) 
    { 
     $this->updatetAt = $updatetAt; 

     return $this; 
    } 

    /** 
    * Get updatetAt 
    * 
    * @return \DateTime 
    */ 
    public function getUpdatetAt() 
    { 
     return $this->updatetAt; 
    } 

    /** 
    * Set logoFileName 
    * 
    * @param string $logoFileName 
    * @return Client 
    */ 
    public function setLogoFileName($logoFileName) 
    { 
     $this->logoFileName = $logoFileName; 

     return $this; 
    } 

    /** 
    * Get logoFileName 
    * 
    * @return string 
    */ 
    public function getLogoFileName() 
    { 
     return $this->logoFileName; 
    } 

    /** 
    * Set logoContentType 
    * 
    * @param string $logoContentType 
    * @return Client 
    */ 
    public function setLogoContentType($logoContentType) 
    { 
     $this->logoContentType = $logoContentType; 

     return $this; 
    } 

    /** 
    * Get logoContentType 
    * 
    * @return string 
    */ 
    public function getLogoContentType() 
    { 
     return $this->logoContentType; 
    } 

    /** 
    * Set logoFileSize 
    * 
    * @param integer $logoFileSize 
    * @return Client 
    */ 
    public function setLogoFileSize($logoFileSize) 
    { 
     $this->logoFileSize = $logoFileSize; 

     return $this; 
    } 

    /** 
    * Get logoFileSize 
    * 
    * @return integer 
    */ 
    public function getLogoFileSize() 
    { 
     return $this->logoFileSize; 
    } 

    /** 
    * Set logoUpdatedAt 
    * 
    * @param \DateTime $logoUpdatedAt 
    * @return Client 
    */ 
    public function setLogoUpdatedAt($logoUpdatedAt) 
    { 
     $this->logoUpdatedAt = $logoUpdatedAt; 

     return $this; 
    } 

    /** 
    * Get logoUpdatedAt 
    * 
    * @return \DateTime 
    */ 
    public function getLogoUpdatedAt() 
    { 
     return $this->logoUpdatedAt; 
    } 

    /** 
    * Set createdAt 
    * 
    * @param \DateTime $createdAt 
    * @return Client 
    */ 
    public function setCreatedAt($createdAt) 
    { 
     $this->createdAt = $createdAt; 

     return $this; 
    } 

    /** 
    * Get createdAt 
    * 
    * @return \DateTime 
    */ 
    public function getCreatedAt() 
    { 
     return $this->createdAt; 
    } 

    /** 
    * Set updatedAt 
    * 
    * @param \DateTime $updatedAt 
    * @return Client 
    */ 
    public function setUpdatedAt($updatedAt) 
    { 
     $this->updatedAt = $updatedAt; 

     return $this; 
    } 

    /** 
    * Get updatedAt 
    * 
    * @return \DateTime 
    */ 
    public function getUpdatedAt() 
    { 
     return $this->updatedAt; 
    } 

    /** 
    * Add projects 
    * 
    * @param \Acme\KeywordBundle\Entity\Project $projects 
    * @return Client 
    */ 
    public function addProject(\Acme\KeywordBundle\Entity\Project $projects) 
    { 
     $this->projects[] = $projects; 

     return $this; 
    } 

    /** 
    * Remove projects 
    * 
    * @param \Acme\KeywordBundle\Entity\Project $projects 
    */ 
    public function removeProject(\Acme\KeywordBundle\Entity\Project $projects) 
    { 
     $this->projects->removeElement($projects); 
    } 

    /** 
    * Get projects 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getProjects() 
    { 
     return $this->projects; 
    } 

    /** 
    * Add files 
    * 
    * @param \Acme\KeywordBundle\Entity\File $files 
    * @return Client 
    */ 
    public function addFile(\Acme\KeywordBundle\Entity\File $files) 
    { 
     $this->files[] = $files; 

     return $this; 
    } 

    /** 
    * Remove files 
    * 
    * @param \Acme\KeywordBundle\Entity\File $files 
    */ 
    public function removeFile(\Acme\KeywordBundle\Entity\File $files) 
    { 
     $this->files->removeElement($files); 
    } 

    /** 
    * Get files 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getFiles() 
    { 
     return $this->files; 
    } 

    /** 
    * Add contacts 
    * 
    * @param \Acme\KeywordBundle\Entity\Contact $contacts 
    * @return Client 
    */ 
    public function addContact(\Acme\KeywordBundle\Entity\Contact $contacts) 
    { 
     $this->contacts[] = $contacts; 

     return $this; 
    } 

    /** 
    * Remove contacts 
    * 
    * @param \Acme\KeywordBundle\Entity\Contact $contacts 
    */ 
    public function removeContact(\Acme\KeywordBundle\Entity\Contact $contacts) 
    { 
     $this->contacts->removeElement($contacts); 
    } 

    /** 
    * Get contacts 
    * 
    * @return \Doctrine\Common\Collections\Collection 
    */ 
    public function getContacts() 
    { 
     return $this->contacts; 
    } 

public function __toString() 
    { 
    return $this->name; 
    } 

} 

show.html.twig из cliententity

список проектов должен schow под

проекта лист

{% extends '::base.html.twig' %} 

{% block body -%} 
    <h1>Client</h1> 

    <table class="record_properties"> 
     <tbody> 
     <!-- 
      <tr> 
       <th>Id</th> 
       <td>{{ entity.id }}</td> 
      </tr> 
      <tr> 
     -->  
       <th>Name</th> 
       <td>{{ entity.name }}</td> 
      </tr> 
      <tr> 
     <!-- 
       <th>Createdat</th> 
       <td>{{ entity.createdAt|date('Y-m-d H:i:s') }}</td> 
      </tr> 
      <tr> 
       <th>Updatedat</th> 
       <td>{{ entity.updatedAt|date('Y-m-d H:i:s') }}</td> 
      </tr> 
      <tr> 
       <th>Logofilename</th> 
       <td>{{ entity.logoFileName }}</td> 
      </tr> 
      <tr> 
       <th>Logocontenttype</th> 
       <td>{{ entity.logoContentType }}</td> 
      </tr> 
      <tr> 
       <th>Logofilesize</th> 
       <td>{{ entity.logoFileSize }}</td> 
      </tr> 
      <tr> 
       <th>Logoupdatedat</th> 
       <td>{{ entity.logoUpdatedAt|date('Y-m-d H:i:s') }}</td> 
      </tr> 
     --> 
     </tbody> 
    </table> 

     <ul class="record_actions"> 
    <li> 
     <a href="{{ path('clients') }}"> 
      Back to the list 
     </a> 
    </li> 
    <li> 
     <a href="{{ path('clients_edit', { 'id': entity.id }) }}"> 
      Edit 
     </a> 
    </li> 
    <li>{{ form(delete_form) }}</li> 
</ul> 

<h1>Project list</h1> 



{% endblock %} 
+1

Можете ли вы показать нам свой клиентский объект? И вы используете веточку для рендеринга? – Syjin

+0

Вы можете использовать картографирование доктрины для сопоставления проекта Client one-to-many. Тогда вы можете получить все проекты клиента. Подробнее здесь http://symfony.com/doc/current/book/doctrine.html#relationship-mapping-metadata –

+0

@Syjin Я добавил объект клиента и да, я использую ветку для рендеринга. Спасибо за ваш ответ. –

ответ

0

Если объектные отношения настроены правильно (то, что они, кажется), то вы можете Acces массив проектов direclty в веточке:

{% for project in entity.projects %} 
    Name: {{ project.name }} 
    ... 
{% endfor %} 
+0

Danke für diese einfache und hilfreiche Antwort. Что я могу сделать, когда просто хочу показать проекты, связанные с клиентом ceratain? –

+0

Вы видели мой второй вопрос? –

+0

Итак, вы не хотите, чтобы получить клиентский объект, но все проекты, связанные с определенным идентификатором клиента? '$ em-> getRepository ('AcmeKeywordBundle: Project') -> findBy (array ('id' => $ id))' –

Смежные вопросы