第一步、先安裝 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