PHP

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…

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」や…

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

PHP

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

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() でバンドル名のエイ…

kriswallsmith/Buzz について色々

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

Phakeを試してみます

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

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…

PHPMDを試してみます

PHP

PHPの静的解析ツール PHPMD(PHP Mess Detector) を試してみます。 セットアップ // composer.json { // ... "require-dev": { // ... "pdepend/pdepend" : "1.1.*", "phpmd/phpmd": "1.4.*" } } $ php composer.phar update phpmd/phpmd // .bashrc alias ph…

Net_SFTPドキュメントを翻訳してみました。

PHP

http://phpseclib.sourceforge.net/documentation/net.html#net_sftp を翻訳してみました。 5.2.3. Net_SFTP の例 login('username', 'password')) { exit('Login Failed'); } echo $sftp->pwd() . "\r\n"; $sftp->put('filename.ext', 'hello, wo…

PHPでzipファイルを扱います

PHP

ZipArchiveを試して見たいと思います。 Symfony2のコマンドで実装っと。 class TestZipArchiveCommand extends ContainerAwareCommand { protected function configure() { $this->setName('sample:zip-archive'); $this->setDescription('ZipArchiveを試し…

Phakeを試してみます

テストしたいクラスがあるけど、依存クラスの実装が終わっていないとき。 そんな時にモックを使ってテストするアプローチです。 class Model { public function login(Api $api, $id = 0) { $result = $api->auth($id); if ($result === 'OK'){ return true;…

モデル層でロギング

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

動的なクラスのロード

PHP

こんなクラスがありまして。 class Foo { public function getVersion() { return __CLASS__; } } こんな構成に配備したとして。 ./src/.../ ├── Ver_1_0 │ └── Foo.php └── Ver_1_1 └── Foo.php 動的にロードしてみます。 $version = '1.0'; $version = str…

phpseclib:SFTPの練習

PHP

phpseclibを使って、SFTPサーバにログイン。 カレントディレクトリのファイルリストを表示してみます。 use Sinner\Phpseclib\Net\Net_SFTP as NetSftp; $targetPattern = '/^data_/'; $sftp = new NetSftp('127.0.0.1'); $sftp->login('username', 'passwd'…

PHPでJSONバリデート

こちらを参考にさせて頂きました。→ JSON SchemaとPHP - 泥のように KnpJsonSchemaBundle by KnpLabs っていうのがあるみたいなのですが、 require php >=5.4 This bundle is in development stage!!! Do not use it in production. とのことなので、見送り…

PHPでUUID

PHP

ramsey/uuid を利用して、PHPでUUID(universally unique identifier)を生成します。 A 64-bit build of PHP and the Moontoast\Math library are recommended. However, this library is designed to work on 32-bit builds of PHP without Moontoast\Math, …

Phakeモックを使ったテストコードを動かすまで

XAMPP + Cygwin 環境で、PHPメンターズ「Symfony2ベースのユーザー登録サンプル」をセットアップして、同梱されている「Phakeモックを使ったテストコード」を動かしたいと思います。 PHPメンターズ「Symfony2ベースのユーザー登録サンプル」 http://phpmento…