Php/Symfony/Symfony2/doctrine/crud
提供: 初心者エンジニアの簡易メモ
dbに合わせたcontrollerを作成する(crud)
entityを作成した後controllerを作成するサンプルを以下に
entityをまずgenerateで作成
$ php app/console doctrine:generate:entity --entity="AcmeHelloBundle:Blog" --fields="name:string(255) description:text"
作られたphp
-src/Acme/HelloBundle/Entity/Blog.php
namespace Acme\HelloBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Blog * * @ORM\Table("blogs") * @ORM\Entity */ class Blog { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=255) */ private $name; /** * @var string * * @ORM\Column(name="description", type="text") */ private $description; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set name * * @param string $name * @return Blog */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set description * * @param string $description * @return Blog */ public function setDescription($description) { $this->description = $description; return $this; } /** * Get description * * @return string */ public function getDescription() { return $this->description; } }
モデルからsql発行
# スキーマ作成時 php app/console doctrine:schema:create # スキーマ更新時 php app/console doctrine:schema:update
crudでcontrollerやviewを作成する
$ php app/console doctrine:generate:crud --entity="AcmeHelloBundle:Blog"
作られた2つのphpと2つのtwig
- src/Acme/HelloBundle/Controller/BlogController.php
- src/Acme/HelloBundle/Tests/Controller/BlogControllerTest.php
- src/Acme/HelloBundle/Resources/views/Blog/index.html.twig
- src/Acme/HelloBundle/Resources/views/Blog/show.html.twig
以下詳細
-src/Acme/HelloBundle/Controller/BlogController.php
namespace Acme\HelloBundle\Controller; 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\HelloBundle\Entity\Blog; /** * Blog controller. * * @Route("/blog") */ class BlogController extends Controller { /** * Lists all Blog entities. * * @Route("/", name="blog") * @Method("GET") * @Template() */ public function indexAction() { $em = $this->getDoctrine()->getManager(); $entities = $em->getRepository('AcmeHelloBundle:Blog')->findAll(); return array( 'entities' => $entities, ); } /** * Finds and displays a Blog entity. * * @Route("/{id}", name="blog_show") * @Method("GET") * @Template() */ public function showAction($id) { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository('AcmeHelloBundle:Blog')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find Blog entity.'); } return array( 'entity' => $entity, ); } }
-src/Acme/HelloBundle/Tests/Controller/BlogControllerTest.php
namespace Acme\HelloBundle\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; class BlogControllerTest extends WebTestCase { /* public function testCompleteScenario() { // Create a new client to browse the application $client = static::createClient(); // Go to the list view $crawler = $client->request('GET', '/blog/'); $this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for GET /blog/"); // Go to the show view $crawler = $client->click($crawler->selectLink('show')->link()); $this->assertEquals(200, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code"); } */ }
-src/Acme/HelloBundle/Resources/views/Blog/index.html.twig
{% extends '::base.html.twig' %} {% block body -%} <h1>Blog list</h1> <table class="records_list"> <thead> <tr> <th>Id</th> <th>Name</th> <th>Description</th> <th>Actions</th> </tr> </thead> <tbody> {% for entity in entities %} <tr> <td><a href="{{ path('blog_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td> <td>{{ entity.name }}</td> <td>{{ entity.description }}</td> <td> <ul> <li> <a href="{{ path('blog_show', { 'id': entity.id }) }}">show</a> </li> </ul> </td> </tr> {% endfor %} </tbody> </table> {% endblock %}
-src/Acme/HelloBundle/Resources/views/Blog/show.html.twig
{% extends '::base.html.twig' %} {% block body -%} <h1>Blog</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>Description</th> <td>{{ entity.description }}</td> </tr> </tbody> </table> <ul class="record_actions"> <li> <a href="{{ path('blog') }}"> Back to the list </a> </li> </ul> {% endblock %}
参考
http://tech.quartetcom.co.jp/symfony2-intro/2013/12/12/symfony2-intro-2/