PostgreSQL リハビリ

7.3以降、久しぶりにPostgreSQL案件に携わることになったので、リハビリのメモ。 PostgreSQL本体は、Windows版のバイナリパッケージでお気軽インストール。 Windowsサービスとしてインストールされます。 インストール中にデータベース・クラスタも作成され…

Doctrine2 DBAL フェッチのサンプル

実装コード class TestDoctrineDbalFetchCommand extends ContainerAwareCommand { const EXIT_SUCCESS = 0; const EXIT_FAILURE = 1; const THROUGHPUT = 5; protected function configure() { $this->setName('sample:dbal-fetch'); } protected function …

SwiftMailとISO-2022-JPとワードラップ

SwiftMailでISO-2022-JPな日本語メールを送信する際に、次のような問題が生じる場合があります。 文字化け ワードラップ 「Swift MailerでISO-2022-JPなメールが送れなくなっていた件について - polidog lab++」を 参考にさせて頂きました。 検証コード clas…

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…

Vagrant(ベイグラント)の備忘録

準備 VirtualBoxインストール https://www.virtualbox.org/ Vagrantインストール http://www.vagrantup.com/downloads.html 仮想マシンのセットアップとブート 以下、Cygwin上で作業しました。 Boxの追加 Usage: vagrant box add <name> <url> windowsの場合は、C:\User</url></name>…

Symfony2 PHPエラーを捕まえます

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

Apache JMeterについて

Apache JMeter についての備忘録です。 参考資料 http://www.jasst.jp/archives/jasst07e/pdf/C2-1.pdf ダウンロード http://jmeter.apache.org/download_jmeter.cgi 起動 管理者権限で bin/jmeter.bat を実行します。 テスト計画の作成 スレッドグループの…

phalconのインストール

「phalcon がいい感じですよ」と伺ったので、xampp環境にインストールしてみます。 インストール XAMPPへのインストール — Phalcon 1.3.1 ドキュメント を参考にしました。 XAMPPの場合、PHPインタプリタが32bitなので、「x86版」の php_phalcon.dll を xamp…

Symfony2 カスタムバリデータ

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

ab(apache bench)の使い方メモ

JSONリクエストを受け取るAPIのベンチマークを採りたいと思います。 BASIC認証が必要な場合は、「-A ユーザ名:パスワード」オプションで。 Content-Typeの指定は「-T」オプションで。 POSTデータは「-p」オプションにファイルパスを渡します。 xamppにバンド…

JSONスキーマバリデータとオリジナルのエラーメッセージ

PHP

justinrainbow/json-schema は大変便利なんですが、どの制約(Constraints)に引っかかったのか分かりません。 オリジナルのエラーメッセージの出し分けに'message'をヒントにしようと思います。 制約キーワード 分類 キーワード 必須系 require, defined 無効…

Doctrine2 DBAL フェッチのサンプル

実装コード class TestDoctrineDbalFetchCommand extends ContainerAwareCommand { const EXIT_SUCCESS = 0; const EXIT_FAILURE = 1; const THROUGHPUT = 5; protected function configure() { $this->setName('sample:dbal-fetch'); } protected function …

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…

Goutte でスクレイピング

Goutte は a screen scraping and web crawling library for PHP だそうです。 私は twilog をブックマーク代わりに使っているのですが、 Goutte を使ってツイートをスクレイピングしてみようと思います。 なお Goutte depends on PHP 5.4+ and Guzzle 4+. I…

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 …

Doctrine2 Mapping Type を確認します

Entity 以下の様なエンティティを用意して、 $ php app/console doctrine:schema:update --force で、DBスキーマを作ってみます。 use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="foobar") */ class FooBar { /** * @ORM\Id * @ORM…

Doctrine2 ORM のロック機構について

参考情報 : 9. Transactions and Concurrency — Doctrine 2 ORM 2.0.0 documentation 楽観的ロック と 悲観的ロックがあります 楽観的ロック : LockMode::OPTIMISTIC + version指定(任意) 悲観的ロック : LockMode::PESSIMISTIC_WRITE 楽観的ロックの場合、…

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 実装コード …

Doctrine2 ドキュメント翻訳

8. Working with Objects — Doctrine 2 ORM 2 documentation を翻訳してみようと思います。 8. Working with Objects この章は、EntityManager と UnitOfWork の理解を助けるものです。 Unit of Work は、オブジェクトレベルのトランザクションに似ています…

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…

cURLでlocalhostにリクエストで502エラー : proxyが原因でした

Cygwin上のphpunitで、cURLを利用したWebAPIクライアントをテスト中に「502 Bad Gateway」で少し詰まってしまいました。リクエスト先はlocalhost上のURL. でもwebブラウザだと問題ないのにナゼ? 環境変数「http_proxy」がlocalhostにも適用されてしまった事…