第一步、先安裝 Composer 後建立 Symfony2 Project
步驟可參考官網教學
[1] http://symfony.com/doc/current/quick_tour/the_big_picture.html
$ composer create-project symfony/framework-standard-edition myproject/ "~2.3"
第二步、建立新的 Bundle 作為我們的範例
*如果你有看 [1] 的話,就會大致上知道 Bundle 在專案裡是什麼角色。
可先閱讀一下這篇:
[2] http://symfony.com/doc/current/book/doctrine.html
$ php app/console generate:bundle --namespace=Acme/StoreBundle
然後依照 [2] 裡面的方法設定 & 建立 -> 資料庫 & Entity
其實 Symfony 底下是用 doctrine 這個 framework 做 ORM
$ php app/console doctrine:database:create
這個指令可以用互動式的方式產生 entity ,不過我還是喜歡自己手寫 PHP Annotation
$ php app/console doctrine:generate:entity
定義完 Entity 欄位後可以用下面指令直接產生 getter/setter
指定特定類別
$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product
或是指定整個 namespace
$ php app/console doctrine:generate:entities AcmeStoreBundle $ php app/console doctrine:generate:entities Acme
步驟三、實際把 Entity 資訊更新到資料庫
$ php app/console doctrine:schema:update --force
步驟四、加入 Serialize 工具 (藉以產出 JSON / XML 等格式)
可先參考一下這篇文章:
安裝方法就是在 composer.json 加入 serialize 的 package 後 composer update
步驟五、寫 Controller 和設定 Router
use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\Serializer\Encoder\JsonEncoder; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer; public function showAction($id) { $product = $this->getDoctrine() ->getRepository('AcmeStoreBundle:Product') ->find($id); if (!$product) { throw $this->createNotFoundException( 'No product found for id '.$id ); } $encoders = array(new JsonEncoder()); $normalizers = array(new GetSetMethodNormalizer()); $serializer = new Serializer($normalizers, $encoders); $jsonContent = $serializer->serialize($product, 'json'); $response = new JsonResponse(); $response->setContent($jsonContent); return $response; }
acme_store_show_product: path: /product/show/{id} defaults: { _controller: AcmeStoreBundle:Default:show }
No comments:
Post a Comment