Issei.M's Techlog

Web/iOS エンジニアの僕が技術関連のメモ等をつらつらと。主に Symfony について書いています。

PHP

[Symfony] 最近のSymfony Standard Editionのディレクトリ構成

この記事はSymfony Advent Calendar 2015 15日目の記事です(当日0時過ぎに枠が空いてる事に気づいて急遽書きました。)。前回は@tai2さんのDoctrineのベストプラクティス(Doctrine 2 documentationから抜粋翻訳)でした。 既にお使いの方はご存知かと思いま…

Plug 'n Play with Puli

この記事はSymfony Advent Calendar 2015 13日目の記事です。前回は@77webさんのSymfonyのFormをテストするとき、どんなテストクラスを書くべきか?でした。 今日はSymfonyのコアメンバーであり、Form, Validator, OptionsResolverなどの主要コンポーネント…

[Doctrine] SQLiteでQuery::iterate()を使うとDBがロックする件

僕はSymfony+Doctrineプロジェクトで機能テストを作る際、 LiipFunctionalTestBundle を使ってテスト環境だけSQLiteで動作するようにしているのですが、ある時から途中でDBがロックしてしまい、テストスイートがパスしなくなってしまいました。 SQLSTATE[HY0…

[Symfony][Form] フィールドタイプはよく考えて決めよう

Symfony2を使い始めて2年くらい経ちましたが、未だ全容をつかみきれない機能の1つがForm。今回はそんなFormのフィールドタイプについて話します。 通常、Symfony2のFormではフィールドタイプを次のようにして定義します。 $builder->add('addressLine', 'tex…

[Symfony] Doctrine の Repository をサービスコンテナに登録する

AcmeBlogBundle\Repository\BlogRepositoryをサービスコンテナに追加: # @AcmeBlogBundle/Resources/config/services.yml parameters: acme_blog.repository.blog.class: Acme\BlogBundle\Repository\BlogRepository services: acme_blog.repository.blog: c…

[Doctrine] MySQL の TEXT 型を使用する

※Doctrine 2.3 以下でのお話です。 MySQL のカラムにTEXT型を使おうとして普通に type を text にするとLONGTEXT型になってしまいます。 /** * @ORM\Column(type="text") */ private $title; ※コンソール結果 $ php app/console doctrine:schema:create --du…

[Symfony] Buzz\Browser でお手軽 HTTP リクエスト

HTTP リクエストを送る PHP ライブラリは数多くありますが、中でも Buzz\Browser が使いやすかったので Symfony での使用例をご紹介。 インストール いつも通り、Composer でインストールします。作者は Assetic で有名な Kirs Wallsmith さんです。 php com…

[Symfony] LiipThemeBundle でスマホ対応&Assetic を使う際の諸注意

Symfony でスマートフォン対応するにあたって LiipThemeBundle がよさげだったのでご紹介。また当バンドルを使用する際 Assetic でハマる箇所がある為メモ。 Symfony Standard Edition 2.2.1 の AcmeDemoBundle で試してみます。 LiipThemeBundle をインスト…

[Monolog][Symfony] Monolog が神過ぎる件 ~エラーログをメールで送ろう~

Symfony で採用されているロガーライブラリ Monolog は Python の LogBook と言うライブラリに影響を受けており、 柔軟なロギング処理が可能です。 今回は、Symfony の運用環境でERRORレベル以上のログをファイルに書き込みつつ、メールでも通知するように設…

[Symfony] JSON レスポンスを返す

/** * @Route("/test.json", name="json") */ public function jsonAction() { // do something return new JsonResponse(array('id' => 12345, 'title' => 'json test')); } バージョン 2.1 で追加された JsonResponse をコントローラ内で返すだけです。コ…

[Symfony] サブドメイン別にルーティングを制御する

Symfony 2.2 で正式に追加された機能の様です。 フロントエンドをexample.com、バックエンドをsystem.example.comとしてそれぞれ別のバンドルで運用する場合の設定例をご紹介。 まずはバックエンド用のバンドルを作成します。 $ php app/console generate:bu…

[Symfony][Capistrano] Capifony で Symfony2 のアプリケーションをデプロイする

今回は Symfony アプリを Capistrano で簡単にデプロイできる Capifony (http://capifony.org) の使い方を紹介します。 実行環境は Ruby 1.9.1 + Capistrano 2.14.2 です。 Capifony をインストールする RubyGems でインストールします。 $ gem install capi…

[Doctrine][MySQL] アノテーションで unsigned を定義する

Doctrine2 のエンティティプロパティに unsigned を設定する方法が分かりづらかったのでメモ。 /** * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") * @ORM\Column(type="bigint", options={"unsigned"=true}) */ protected $id; こんな感じで Column…

[Symfony][Doctrine] Fixtures からサービスコンテナを取得する

Fixtures 内で、サービスコンテナを呼び出したくなる事はしばしばあります。 例えば User エンティティクラスが Security コンポーネントの UserInterface を実装している場合、PasswordEncoder を使いたくなりますね。 しかしそのままでは AbstractFixture …