Symfony2

Doctrine2 デバッグモードとEntityManager::clear()について

Doctrine2のパフォーマンスとメモリ使用量について、「デバッグモード」と「EntityManager::clear()」を検証します。 結論 以下の条件を満たす場合、パフォーマンスとメモリ使用量に影響が出るようです。 env が prod 以外で app/console の「--no-debug」オ…

Consoleコンポーネントをスタンドアロンで使ってみます

Symfony2のConsoleコンポーネントをスタンドアロンで使ってみます composer.json { "autoload": { "psr-0": {"": "src/"} }, "require": { "symfony/console": "dev-master" } } セットアップ $ curl -O http://getcomposer.org/composer.phar $ php compose…

Symfony2 PHPエラーを捕まえます

Debugコンポーネント を利用して、PHPエラーを捕まえてみようと思います。 You should never enable the debug tools in a production environment as they might disclose sensitive information to the user. ということなので、カスタマイズした例外ハン…

Symfony2 カスタムバリデータ

Symfony2標準の日付バリデータ (vendor/symfony/symfony/src/Symfony/Component/Validator/Constraints/DateValidator.php)は、 以下の様に書式が「YYYY-MM-DD」形式となっています。 const PATTERN = '/^(\d{4})-(\d{2})-(\d{2})$/'; 年月文字列「YYMM」や…

Symfony2 Console Table Helper を試してみます

実装コード use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class ConsoleTableHelperCommand extends ContainerAwareCo…

Symfony2 バンドル固有のパラメータ定義

バンドル固有のパラメータは、Resources/config/parameters.yml に定義するのが一般的の様です。 app/config/config.yml imports: - { resource: parameters.yml } - { resource: @FooBarBundle/Resources/config/parameters.yml } src/Foo/BarBundle/Resour…

Symfony2 phpunitでJSON-APIの機能テストをします

JSONテキストを返すAPIをSymfony2で実装して、実際にリクエストを投げてその応答をテストしてみようと思います。 テスト対象のAPIコントローラ use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; u…

Symfony2 一時ファイルに関して

Symfony2アプリケーション内で一時的なファイルを作成する場合、こちらによれば、キャッシュディレクトリ内がオススメの様です。 Kernel::getCacheDir() でキャッシュディレクトリのパスを取得できます。 ExtensionInterface::getAlias() でバンドル名のエイ…

Symfony2 カーネルが保持している情報について

簡易コードを書いて調べてみました。 use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class ShowConfigCommand extends …

kriswallsmith/Buzz について色々

PHPのHTTPクライアントライブラリ kriswallsmith/Buzz について色々調べてみます。 検証コード use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Ou…

Symfony2 SecureRandom を試してみます。

Symfony2.2で追加された SecureRandom を試してみます。 お題 : 3byteの16進表記数値を求める こんな結果を得たいと思います。 $ php app/console sample:secure-random 65c5d8 0dc704 0c1f15 377ba6 8d9413 ae47ff 9abc51 b194bf ca1344 cefb1c 実装コード …

Phakeを試してみます

ロジックコードをテストしたいけど、EntityManager や Repository、データベースに依存している... そんな時のモック&スタブを面倒みてくれる Phake を試してみます。 テスト対象のメソッドを含むクラス class FooBar { protected $em; // コンストラクタに…

Symfony2 サービスにEntityManagerを注入します(Dependency Injection)

データベース操作を伴うサービス(ビジネスロジック)を開発する際、エンティティマネージャをどうやって求めれば良いでしょうか? 呼出側から都度もらう?自前でコンテナ経由で取得(ハードコード)する? んー、サービス呼出時にコンテナから注入してもらいま…

Symfony2 Doctrine2のEventManagerをコンテナから取得します

コンテナに登録されているサービスの抜粋は以下です。 $ php app/console container:debug | egrep '(^doctrine\s|^doctrine.+entity_manager)' doctrine container Doctrine\Bundle\DoctrineBundle\Registry doctrine.orm.default_entity_manager container…

Symfony2のparametersを使ってみます

こんな config/parameters.yml があったとします。 parameters: my_application: end_of_maintainance: 2015-01-01 12:34:56 is_stable: true release_manager: "Foo Bar" description: | This stable version is the right choice for projects that need t…

Symfony2 で DDD を学びます

PHPメンターズ さんの「PHPメンターズ -> Symfony2ベースのDDD仕様パターンの利用サンプルを公開しました」を題材に、Symfony2 で ドメイン駆動設計(DDD: Domain-Driven Design)を学んでみようと思います。 セットアップ phpmentors-jp/phpmentors-example-c…

Doctrine2 ORM を試してみます

エンティティクラスの作成 プロパティとマッピング情報を定義します。 use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="products") */ class Product { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strateg…

Symfony2 JSONリクエストを受け取ります

JSONテキストでPOSTされてきたデータを処理するアクションを作ってみます。 JSONをデシリアライズして得たいオブジェクト class AcceptedObject { /** * @Serializer\Type("integer") */ private $id; /** * @Serializer\Type("string") */ private $name; p…

Symfony2 アクションでJSONを返します(その2)

POSTされたデータをそのままJSONで返す様なEchoサービスを作ってみます。 Resources/config/routing.yml path: /echo/ defaults: { _controller: xxxxxBundle:Echo:index } methods: [POST] POSTメソッドのみ許可します。 ルーティング定義のパラメータが、S…

Symfony2 アクションでJSONを返します

Symfony2のJsonResponse と JMSSerializerBundle を使って、JSONテキストを返すアクションを作ってみます。JMSSerializerのドキュメントはこちら。 セットアップ // composer.json { // ... require: { // ... "jms/serializer-bundle": "dev-master" } } $ …

Symfony2 - コントローラの基本形、フォーム送信データのバインドについて

フォーム送信データのバインドについて、日本語ドキュメント を見てみると2.0時代の書き方になっている様でしたので、本家の情報を確認してみました。 結論 コントローラの基本形は以下になります。 $form->handleRequest($request); if ($form->isSubmitted…

モデル層でロギング

Symfony2で採用されているmonologは、PSR-3 Logger Interface(Psr/Log/LoggerInterface)準拠だそうで。 このmonologを使って、モデル層のクラスでロギングしたいなと思いました。 use Psr\Log\LoggerInterface; class FooBarModel { protected $logger; publ…

Symfony2のバリデーション - 制約のYAML定義とエラーメッセージの国際化

アノテーションがあまり好きではないので、バリデーションの制約をYAMLに定義することにしました。 ついでにエラーメッセージの国際化(翻訳)も試してみます。 バリデート対象のオブジェクトが以下だとします。 class SampleData { private $code; ... } Reso…

Symfony2のvalidatorコンポーネント(アノテーション編)

ポイントは以下でしょうか。 特にFormと連携しなくても、単独で使えます。 Symfony2のサービスコンテナに'validator'サービスとして登録されています。 制約は様々なフォーマットで設定できます。→ YAML、XML、アノテーション、PHP ただし、アノテーションを…

Symfony2からHTTPリクエストを投げます

sensiolabs/SensioBuzzBundle · GitHub を使います。 composer.json に { "require": { "sensio/buzz-bundle": "dev-master" } } を書いて composer update します。 $ php composer.phar update "sensio/buzz-bundle":"dev-master" Symfony2のサービスコン…

EclipseでSymfony2の新規プロジェクトをセットアップ

Eclipse(+ PDT Extension)で Symfony project を作成します。 公開ディレクトリで $ curl -s http://getcomposer.org/installer | php $ php composer.phar create-project symfony/framework-standard-edition プロジェクト名/ "2.3.*" ※ app/config/parame…

Symfony2でsftp

pure PHP 実装の phpseclib のSymfony2バンドル sinner/PhpseclibBundle を使って、sftpを試してみます。 composer.json に以下を追加しまして。 { "require": { ... "sinner/phpseclib-bundle": "dev-master" ... } } インストールします。 $ php composer.…

Symfony2 コマンドを作ってみる

src/.../xxxxBundle/Command/xxxxCommand.php ファイルを追加します。

WindowsでSymfony2

Symfony2の開発・実行環境をWindows上に作ります。 Pleiades All in One PHP (Eclipse 4.3 Kepler) Symfony2 Eclipse プラグイン Cygwin Composer Symfony2.3 Pleiades:オールインワン&もろもろセットアップ済みでラクだから。 Eclipse 4.3 Kepler:Symfon…