facebook twitter hatena line email

「Php/Symfony/Symfony2/doctrine/crud」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
行88: 行88:
 
     }
 
     }
 
  }
 
  }
 +
 +
==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 %}

2017年1月16日 (月) 23:37時点における版

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;
   }
}

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 -%}

Blog list

<thead> </thead> <tbody> {% for entity in entities %} {% endfor %} </tbody>
Id Name Description Actions
<a href="{{ path('blog_show', { 'id': entity.id }) }}">テンプレート:Entity.id</a> テンプレート:Entity.name テンプレート:Entity.description
  • <a href="{{ path('blog_show', { 'id': entity.id }) }}">show</a>
   {% endblock %}