気ままなタンス*プログラミングなどのノートブック

プログラミングやRPGツクール、DTM、VOCALOIDについてのんびり書きます。

【Symfony2】勉強会に行ってきた

友人の悠木 彩斗くん(@starlod_twtr)主催の
WordPress&Symfony2勉強会に行ってきた。
たまには別のプログラミング言語をやるのも刺激があって良い。

勉強会の実施場所

場所は神田駅前 時間制多目的スペース KANDA LOUNGE(神田ラウンジ) |
最長19:00までで、何時間居たとしても、なんとお値段「\1,250」
・飲料・食料持ち込みOK
・カップ式自販機あり(すべて無料)
・マッサージ機あり
・会議室あり

勉強会や外プログラミングには最適な場所だと思った。

WordPressのお勉強

WordPressのスタートアップから始まり、
テーマの導入、プラグインの導入、利用方法等を学んだ。


さらにそこから悠木くんが仕事で利用している
PHPフレームワーク「Symfony2」の勉強を実施することとなった。

Symfony2のお勉強

Symfony2のインストーラ(pharアーカイブの作成)

// コマンドラインで実行
php -r "readfile('http://symfony.com/installer');" > symfony.phar

symfony.pharでSymfony2プロジェクトを作る

// コマンドラインで実行
php symfony.char new my_blog 2.5.9

プロジェクトディレクトリに移動し、プロジェクトをチェックする

cd my_blog
php app/check.php

問題ない場合は以下のようなメッセージが表示される

 [OK]
 Your system is ready to run Symfony2 projects


こんなエラーが出たら、php.iniのtimezoneを確認し、「Asia/Tokyo」に設定する

【エラー内容】
Checking that the "date.timezone" setting is set: FAILED *** Set the "date.timezone" setting in php.ini (like Europe/Paris) 

【設定確認箇所】
php.iniの900行目あたり(Asia/Tokyoになっているか?)

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo

開発用サーバーを起動し、http://127.0.0.1:8000にアクセス

php app/console server:run

ポート番号8000で、開発サーバーが起動される

Server running on http://127.0.0.1:8000

Quit the server with CONTROL-C.

管理画面が出たらOK

f:id:rinne_grid2_1:20150308083108p:plain

Bundleを生成する

php app/console generate:bundle --namespace=My/BlogBundle --format=yml


生成するBundleについて聞かれるので、Enterを押していく

  Welcome to the Symfony2 bundle generator



In your code, a bundle is often referenced by its name. It can be the
concatenation of all namespace parts but it's really up to you to come
up with a unique name (a good practice is to start with the vendor name).
Based on the namespace, we suggest MyBlogBundle.

Bundle name [MyBlogBundle]:

The bundle can be generated anywhere. The suggested default directory uses
the standard conventions.

Target directory [D:\source\php\blog/src]:

To help you get started faster, the command can generate some
code snippets for you.

Do you want to generate the whole directory structure [no]?


  Summary before generation


You are going to generate a "My\BlogBundle\MyBlogBundle" bundle
in "D:\source\php\blog/src/" using the "yml" format.

Do you confirm generation [yes]?


  Bundle generation


Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]?
Enabling the bundle inside the Kernel: OK
Confirm automatic update of the Routing [yes]?
Importing the bundle routing resource: OK


  You can now start using the generated code!

バンドル名
Bundle name [MyBlogBundle]:
ソースディレクトリ
Target directory [D:\source\php\blog/src]:

Do you confirm generation [yes]?
カーネルに追加?
Confirm automatic update of your Kernel [yes]?
Routingに追加?
Confirm automatic update of the Routing [yes]?


エンティティの作成

php app/console generate:doctrine:entity --entity=MyBlogBundle:Post --format=annotation --fields="title:string(255) body:text createdAt:datetime updatedAt:datetime"

スキーマの作成

php app/console doctrine:schema:create

Routingへの追記

app/config/routing.yml

blog:
    resource "@MyBlogBundle/Controller"
    type: annotation

開発サーバーの起動

php app/console server:run

感想・・・DjangoやっててSymfony2やるとわかりやすい

・BundleはDjangoでいうAppかな?
・エンティティの作成やルーティング等は、Railsっぽい感じ
スキーマへの反映は似ている
・テンプレート(twig)とDjangoテンプレートはほぼ同じで、理解しやすい
 (extendsとか、blockとか)

Symfony2、Django対比表(厳密ではない)

アクション Symfony2 Django
プロジェクトの作成 php symfony.phar new project django-admin.py startproject project
Bundleの作成 app/console generate:bundle --namespace=Hoge manage.py startapp hoge
エンティティの作成 app/console generate:doctorine:entity models.Modelを継承したクラスをmodels.pyに記載
URLスキーム設計 コントローラ内でアノテーションによる指定 urls.pyへのパターン記載
スキーマ作成 app/console doctrine:schema:create (Django 1.7.x)manage.py makemigrations manage.py migrate
開発サーバー起動 app/console server:run manage.py runserver
モデルからのデータ取得 $em = $this->getDoctrine()->getManager(); $em->getRepository('BundleName:ModelName')->findAll() ModelName.objects.all()