「Php/Symfony/Symfony2/doctrine/crud」の版間の差分
提供: 初心者エンジニアの簡易メモ
(同じ利用者による、間の5版が非表示) | |||
行88: | 行88: | ||
} | } | ||
} | } | ||
+ | |||
+ | モデルからsql発行 | ||
+ | # スキーマ作成時 | ||
+ | php app/console doctrine:schema:create | ||
+ | # スキーマ更新時 | ||
+ | php app/console doctrine:schema:update --force | ||
==crudでcontrollerやviewを作成する== | ==crudでcontrollerやviewを作成する== | ||
行94: | 行100: | ||
作られた2つのphpと2つのtwig | 作られた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 | |
行173: | 行179: | ||
-src/Acme/HelloBundle/Resources/views/Blog/index.html.twig | -src/Acme/HelloBundle/Resources/views/Blog/index.html.twig | ||
<pre> | <pre> | ||
− | + | {% extends '::base.html.twig' %} | |
− | + | {% block body -%} | |
<h1>Blog list</h1> | <h1>Blog list</h1> | ||
<table class="records_list"> | <table class="records_list"> | ||
行207: | 行213: | ||
-src/Acme/HelloBundle/Resources/views/Blog/show.html.twig | -src/Acme/HelloBundle/Resources/views/Blog/show.html.twig | ||
<pre> | <pre> | ||
− | + | {% extends '::base.html.twig' %} | |
− | + | {% block body -%} | |
<h1>Blog</h1> | <h1>Blog</h1> | ||
<table class="record_properties"> | <table class="record_properties"> | ||
行232: | 行238: | ||
</a> | </a> | ||
</li> | </li> | ||
− | + | </ul> | |
− | + | {% endblock %} | |
</pre> | </pre> | ||
+ | |||
+ | ==ルーティングを手動で追加== | ||
+ | -src/Acme/HelloBundle/Resources/config/routing.yml | ||
+ | blog_show: | ||
+ | path: /blog/{id} | ||
+ | defaults: { _controller: AcmeHelloBundle:Blog:show } | ||
+ | blog: | ||
+ | path: /blog | ||
+ | defaults: { _controller: AcmeHelloBundle:Blog:index } | ||
+ | |||
+ | "blog_show"と"blog"はtwigのpathと同じものを入れる | ||
+ | 例:<a href="{{ path('blog_show', { 'id': entity.id }) }}">show</a> | ||
+ | |||
+ | ==参考== | ||
+ | http://tech.quartetcom.co.jp/symfony2-intro/2013/12/12/symfony2-intro-2/ |
2017年1月17日 (火) 16:39時点における最新版
目次
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 --force
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 %}
ルーティングを手動で追加
-src/Acme/HelloBundle/Resources/config/routing.yml
blog_show: path: /blog/{id} defaults: { _controller: AcmeHelloBundle:Blog:show } blog: path: /blog defaults: { _controller: AcmeHelloBundle:Blog:index }
"blog_show"と"blog"はtwigのpathと同じものを入れる
例:<a href="{{ path('blog_show', { 'id': entity.id }) }}">show</a>
参考
http://tech.quartetcom.co.jp/symfony2-intro/2013/12/12/symfony2-intro-2/