タグ

ブックマーク / innx-hidenori.hatenadiary.org (24)

  • Symfony2のデバッグモードのエラー画面で、ファイルのパスを物理ファイルにリンクする - しんふぉにゃん

    app/config/config_dev.ymlに次のように記述すると、リンクになります。 app.config: ide: macvimmacvim」だと「mvim://open〜」というURLでリンクされ、「textmate」だと「txmt://open〜」というURLになります。他の値を指定した場合、その値がファイルリンク用のパターンになります。 <?php if (isset($config['ide'])) { switch ($config['ide']) { case 'textmate': $pattern = 'txmt://open?url=file://%%f&line=%%l'; break; case 'macvim': $pattern = 'mvim://open?url=file://%%f&line=%%l'; break; default: // s

    Symfony2のデバッグモードのエラー画面で、ファイルのパスを物理ファイルにリンクする - しんふぉにゃん
    brtRiver
    brtRiver 2010/11/04
    これは便利
  • Doctrine2を使った開発のワークフローで悩み中 - しんふぉにゃん

    symfony 1では、ORM Designerを使ってスキーマ設計→schema.yml書き出し→モデルやDBを生成(必要に応じてマイグレーション)というワークフローでした。 こういったワークフローをDoctrine2を使った開発でもやりたいと思い、Doctrine2のコマンド等とあれこれ格闘していますが、今のところまだ「これだ」と思える方法が見つかっていません。 現状、ぶつかった問題点 ORM DesignerはDoctrine2をサポートしているが完全ではなく、リレーションの情報など、一部書き出されたYAMLが不完全 YAMLでマッピング設定を書き、doctrine:generate:entitiesでエンティティを生成すると、getter/setterなども一挙に生成できて楽、しかし問題も YAMLにフィールドを追加した場合の追加分の書き出しがうまくいかなかった(2重になったりした

    Doctrine2を使った開発のワークフローで悩み中 - しんふぉにゃん
    brtRiver
    brtRiver 2010/10/18
    Entityの作成はなんらかの補完機能がないと辛い
  • Symfony2のDIエクステンション - しんふぉにゃん

    (まだきちんと全容をつかめていないのですが)Symfony2のDI+バンドルのシステムには「エクステンション」という機構があって、DIコンテナから得られる設定を使ってバンドルの初期化などを行えます。 これは、各バンドル内の「DependencyInjection」というディレクトリ内に、「〜Extension.php」というファイル名で、Symfony\Bundle\FrameworkBundle\DependencyInjection\Extensionを継承したクラスを作って実装します。 FrameworkExtensionのエイリアスは「app」 エクステンションにはエイリアスをつけることができるようで、エクステンションの「getAlias()」でエイリアス名を返せば、それがエイリアス名になります。 ちなみにFrameworkExtensionはエイリアスが「app」になっていました

    Symfony2のDIエクステンション - しんふぉにゃん
    brtRiver
    brtRiver 2010/10/08
    エクステンション
  • Symfony2のコマンド(タスク)システム - しんふぉにゃん

    symfony 1.xでシステムを開発する場合、結構手放せないのがタスクの仕組みです。組み込みのコマンドはもちろん、バッチ処理から、ちょっとしたヘルパータスクなど、私はシステムを開発する上で結構使っています。 このタスクシステム、Symfony2ではどうなっているのでしょう? 用語としては、「タスク」ではなく「コマンド」という用語になっているようです。 コマンドはバンドル単位で作る symfony 1.xでは、symfonyコアのタスク、プラグインのタスク、プロジェクトレベルのlib/taskにあるタスクが自動的に読み込まれていました。 Symfony2では、「アプリケーション」という概念が変更され、プラグインに近い「バンドル」という単位でアプリケーションも管理されるようになります。 そして、このバンドルという単位でコマンドが読み込まれます。 ※Symfony2のコアもバンドルの1つで、他

    Symfony2のコマンド(タスク)システム - しんふぉにゃん
  • symfonyの設定ファイルのカスケードルール - しんふぉにゃん

    symfonyの設定ファイルは「カスケード」機能があって、下位のレベルに配置した設定ファイルで上位の設定を上書きしたりできます。 基的な説明は、公式サイトの以下のページを参照してください。 symfony 1.x legacy website 基ルールは「symfonyの初期設定」→「プロジェクトグローバル」→「アプリケーション」→「モジュール」と上書きされていくのですが、ここに「プラグイン」が入ると多少ややこしくなります。 プラグインも含めた設定ファイルのカスケードルール symfonyでプラグインを作成・インストールした場合、有効になっているプラグインのconfigディレクトリにある設定ファイルも自動読み込みの対象になります(config_handlers.ymlで設定しているもの)。 この場合のカスケードルールについては、sfApplicationConfigration::ge

    symfonyの設定ファイルのカスケードルール - しんふぉにゃん
    brtRiver
    brtRiver 2010/09/14
    ドキュメントに載っていない設定ファイルのカスケード順。なんとなくしか理解していなかった。
  • symfony X OpenPNE勉強会に参加してきました - しんふぉにゃん

    今度のOSC名古屋でセミナーをやる予定の中村さんと、セミナー内容の打ち合わせをするついでに、手嶋屋さん主催のsymfony X OpenPNE勉強会に参加してきました。 相変わらずの個人的な感想を書いておきます。 私はOpenPNE3をガッツリと触った経験がなかったので、こういう機会にでもOpenPNE3のコードを覗くチャンスができたのがよかった。 OpePNE3のコードは、symfonyの実装サンプルとしても役に立つ 井上さんのセッションで、ウィジェットを生成する部分のコードがどうなっているのかと、OpenPNE3体のコードを見たり opFormItemGeneratorというクラスでいろいろやっていた OpenPNE体のバージョンアップも見据えた開発 手嶋さんのセッションでの「プラグインでモデルを使わない」という点 OpenPNE3のメジャーバージョンアップでは、モデルの変更がある

    symfony X OpenPNE勉強会に参加してきました - しんふぉにゃん
    brtRiver
    brtRiver 2010/07/24
    プラグインでもモデルをがっつり使う派です。
  • symfonyのフロントコントローラーをカスタマイズして、ファイル名の規則などをCakePHP風に - しんふぉにゃん

    Twitterにて、@yuzoneさんが以下のようなことをつぶやいていました。 SymfonyはController名がぜんぶactions.class.phpっぽいので、間違えて違うのを編集しないように注意しないとなー http://twitter.com/yuzone/status/12111530758 これについて、基的にはアクション(Cakeでいうコントローラー)のファイル名は決められたものしか使えない(通常はactions.class.php)のですが、フロントコントローラーを拡張すると、独自の命名規則を使うことができます。 以下、ちょっとだけCake風のファイル名で扱うための変更手順です。 1. 独自フロントウェブコントローラーを作成 symfonyのフロントウェブコントローラーとは、CakePHPでいうControllerクラスの仕事の一部を担うもので、個別のアクションへ

    symfonyのフロントコントローラーをカスタマイズして、ファイル名の規則などをCakePHP風に - しんふぉにゃん
    brtRiver
    brtRiver 2010/04/14
    コアをカスタマイズせずに規約を変える(にはてぶを変更)
  • 取得したDoctrine_Collectionのインデックスに特定のフィールドの値を使う - iNNX Life - real side

    通常、Doctrineでレコードを取得すると、Doctrine_Collectionのインデックスには整数インデックスが使われます。 しかし、取得したレコード一覧を単にループで処理するのではなく、連想配列のように処理したい場合もあります。 このような場合、Doctrine_Collectionのインデックスに、取得するレコードの特定のフィールドを使うように設定できます。 この機能を「Key Mapping」と呼びます。 INDEXBYキーワード コレクション:キーのマッピング Key Mappingの基1 INDEXBYキーワードによる指定 DQL内に直接指定できる「INDEXBY」というキーワードがあります。 これを使うのがもっとも簡単です。 <?php $user_list = Doctrine_Query::create()->from('User u INDEXBY u.hand

    取得したDoctrine_Collectionのインデックスに特定のフィールドの値を使う - iNNX Life - real side
    brtRiver
    brtRiver 2010/04/09
    distinctみたいにも使えるので便利
  • 外部キー=主キーのスキーマを使う場合のowningSide - しんふぉにゃん

    Twitterで@s_kanedaさんがスキーマのowningSideについてつぶやいていました。 symfonyのスキーマファイルに出てくるowningSideってなんだろう http://twitter.com/s_kaneda/status/10203798714 @hidenorigoto ありがとうございます!外部キーが主キーになっているカラムをonDelete: cascadeにしたくて、owningSideを使ってみたらうまくいきました。でもまだよくわかっていません・・・。 http://twitter.com/s_kaneda/status/10209810165 この「owningSide」ですが、どういう時に指定するものなのか分かりやすいドキュメントを見つけられませんでしたが、doctrineのサイトでは以下のページがありました。 http://www.doctrine

    外部キー=主キーのスキーマを使う場合のowningSide - しんふぉにゃん
  • symfonyで自前のYAML設定ファイルを勝手に読み込ませるアイデア - しんふぉにゃん

    昨日、Twitterで@massatさんが以下のようなことをつぶやかれていました。 ・🍻 on Twitter: "sfConfigHandler まわりの挙動を変えるプラグインを書きたいのだが。余地がないぞ・・・。 #symfony" ・🍻 on Twitter: "@vectorxenon config_handlers.yml に自前のymlを記述するとsfConfigCache::importでキャッシュまで作っちゃうプラグインを作ろうと思ったのですが。importの引数で渡すパターン名をConfigHandler内で取れなくて悩み中す" ・🍻 on Twitter: "app.ymlが肥大するのが嫌だから最近は自前のymlを作ってconfig_handlers.ymlに書いてsfDefineEnvironmentConfigHandlerで読んでsfConfigCache:

    symfonyで自前のYAML設定ファイルを勝手に読み込ませるアイデア - しんふぉにゃん
    brtRiver
    brtRiver 2010/02/05
    自前のYAMLの扱い方
  • Lithiumコアライブラリのフィルターを見てみた - しんふぉにゃん

    昨日の第49回PHP勉強会@関東 - events.php.gr.jpで、@yandoさんがLithiumの現状について発表されたそうで、そのスライドを見てみました。 http://blog.candycane.jp/archives/261 LithiumはCake PHPの流れを汲むフレームワークですが、PHP 4対応を捨てて先進的な機能を盛り込んでいるので、symfony使いな私でも気になりまくりなフレームワークです。 で、昨日のスライドの中で、コアライブラリの機能を拡張する「フィルター」の話がありました。(スライド25、26ページ) 簡単に言うと、LithiumコアのObjectまたはStaticObjectクラスの派生クラスで、特定の様式(フィルターチェイン方式) で実行されているメソッドは、applyFilterメソッドでクロージャを設定することでメソッドの動作をカスタマイズで

    Lithiumコアライブラリのフィルターを見てみた - しんふぉにゃん
    brtRiver
    brtRiver 2010/01/31
    PHP5.3以降を使いこなせるかどうかがモダンPHPの境目になりそう
  • symfonyのプラグインコマンドのインストール先ディレクトリを変更する - しんふぉにゃん

    Twitterで@okonomiさんから以下の発言がありました。 symfonyでEthnaのpear-local的なことはできるんかな。手動でパッケージ管理とか無理ですよ? *Tw* 「symfony plugin:install -c pear.php.net --force-license -d pear」でPEARをインストールできた *Tw* @hidenorigoto symfony plugin:install でいけました。ただふつうのプラグインと混じってしまうので、インストールディレクトリを指定できればよかったんですが分からなかったです。 これについて調べてみました。 プラグインのインストール先ディレクトリはsfBaseTask::getPluginManager()内で設定されている がオプションなどでは変更できません http://trac.symfony-proje

    symfonyのプラグインコマンドのインストール先ディレクトリを変更する - しんふぉにゃん
  • AdminGeneratorで生成した一覧画面のフィルタでプルダウンを使う - しんふぉにゃん

    AdminGeneratorで管理画面を生成すると、スキーマで外部キーを定義しているフィールドは自動的にプルダウンが生成されますが、特にマスターテーブルを用意しないようなコード値を持つフィールドは、「テキスト入力+is empty」入力欄が生成されてしまいます。 この入力欄にコード値を入力して絞り込むことも出来ますが、やはり画面上では意味のあるコード名を使用したプルダウンやチェックボックスを使用したいところです。 そこで、フィルタに対応するフォームでウィジェットを変更します。 たとえば、「disp_flag(数値)」=0または1 というフィールドがあるとします。 自動生成されているfilter用フォームクラスでは、次のようなウィジェット/バリデータが定義されています。 <?php // /lib/filter/base/Base〜FormFilter.php //ウィジェットの定義部分 '

    AdminGeneratorで生成した一覧画面のフィルタでプルダウンを使う - しんふぉにゃん
    brtRiver
    brtRiver 2010/01/13
    結構大変なんだな。。
  • sfDoctrineGuardPluginについてのメモ - しんふぉにゃん

    symfonyには次のようなサイトのユーザー管理機能をまとめたプラグインがあります ユーザーのログイン機能 ユーザー一覧をメンテナンスする管理画面 コマンドラインからユーザーの情報を編集する機能 未登録のユーザーがユーザー登録できる画面 パスワードを忘れたユーザーがパスワードを再発行できる画面 ユーザーへのパーミッション・グループの付与と管理 それが「sfDoctrineGuardPlugin」です。 プラグインに付属しているREADMEの翻訳も合わせて参照してください。 sfDoctrineGuardPlugin で使えるコマンド(タスク)一覧 guard :add-group ユーザーにグループを追加する :add-permission ユーザーにパーミッションを追加する :change-password ユーザーのパスワードを変更する :create-user ユーザーを作成する :

    sfDoctrineGuardPluginについてのメモ - しんふぉにゃん
  • DoctrineのSortableビヘイビアを使う場合 - しんふぉにゃん

    レコードをソート可能かつ、各レコードのソート順変更などの操作を可能にする「Sortable」というビヘイビアがありますが、いくつかの実装が存在するようです。 Doctrine公式に登録されているextension http://www.doctrine-project.org/extension/Sortable ソース http://trac.doctrine-project.org/browser/extensions/Sortable/branches/1.2-1.0 symfonyのプラグイン「sfDoctrineAtcAsSortablePlugin」 http://trac.symfony-project.org/browser/plugins/sfDoctrineAtcAsSortablePlugin READMEに「DO NOT USE YET!」と書いてありますので、もう

    DoctrineのSortableビヘイビアを使う場合 - しんふぉにゃん
    brtRiver
    brtRiver 2010/01/07
    Sortableビヘイビアの実装方法が複数ある
  • use_javascriptのオプション - しんふぉにゃん

    symfonyのビューでJavaScriptファイルを動的に追加指定する場合、「use_javascript」ヘルパー関数を使います。 このヘルパー関数の3番目の引数でいくつかオプションを指定できます。 どういったオプションがあるのかは、実際にオプションが使われる「include_javascripts」ヘルパー関数のソースを見ると分かります。 include_javascripts() → get_javascripts() → javascript_include_tag() と呼び出されており、javascript_include_tag() で実際の処理が行われています。 http://trac.symfony-project.org/browser/branches/1.4/lib/helper/AssetHelper.php#L99 rev. 24289 <?php 99 fu

    use_javascriptのオプション - しんふぉにゃん
  • 2009年のsymfonyアドベントカレンダー「More with symfony」はすごい! - しんふぉにゃん

    さて今年も12月になってしまいましたが、12月といえば最近では日プログラマー界隈(主にPerl)でもアドベントカレンダープロジェクトが広まってきましたね。 symfonyは今年も家でアドベントカレンダーが始まりました! http://www.symfony-project.org/advent_calendar/ そして、私は運良く、このアドベントカレンダーの翻訳プロジェクトに参加させていただきました! 昨年までは、アドベントカレンダー公開時点では日語の翻訳が追いついておらず、英語版を読みながら個人的に翻訳を行って進めていた方が何名かいらっしゃったという状況でした。 今年のアドベントカレンダーは、あらかじめ日語翻訳チーム(普段公式サイトのドキュメント翻訳などを行っていた人)に家から声がかかり、翻訳版も同時に公開できるようにプロジェクトが進められました。 すでに先のチャプターのタ

    2009年のsymfonyアドベントカレンダー「More with symfony」はすごい! - しんふぉにゃん
  • ORMフォームで複合ウィジェットを使う - しんふぉにゃん

    ここで説明するやり方はちょっと強引なやり方かと思います。 symfony的にはカスタムウィジェットを作成して使うのが綺麗なやり方だと思います。 以前のエントリで、複合ウィジェットをフォームで扱う方法を紹介しました。 複合ウィジェットの値の取得方法 - しんふぉにゃん 先日某掲示板のsymfonyのスレッドに、ちょっとした質問(http://pc11.2ch.net/test/read.cgi/php/1201177567/896)があったので、これに対応する方法を書いてみます。 通常のフォームの場合は自力で値の取得やデータベースへの保存を行うのでよいのですが、ORMフォーム(DoctrineフォームやPropelフォーム)の場合は、データベースへの値の保存回りの処理もフレームワークがやってくれるので、そこもカスタマイズする必要があります。 今回使用するモデル 住所と電話番号を格納する「Ad

    ORMフォームで複合ウィジェットを使う - しんふぉにゃん
  • symfonyでHTTPリクエストパラメーターがsfWebRequestオブジェクトに渡されるところのメモ - しんふぉにゃん

    <?php // cache/frontend/dev/config/config_factories.yml.php $class = sfConfig::get('sf_factory_routing', 'sfPatternRouting'); $cache = null; $this->factories['routing'] = new $class($this->dispatcher, $cache, array_merge(array('auto_shutdown' => false, 'context' => $this->factories['request']->getRequestContext()), sfConfig::get('sf_factory_routing_parameters', array ( 'load_configuration' => true

    symfonyでHTTPリクエストパラメーターがsfWebRequestオブジェクトに渡されるところのメモ - しんふぉにゃん
    brtRiver
    brtRiver 2009/11/17
    symfonyではcacheディレクトリは重要
  • symfony 1.2/1.3でタスクからヘルパーを利用する - しんふぉにゃん

    symfony1.1までは、sfLoader#loadHelpersメソッドを使用してアクションやタスク内からヘルパーをアクティベートし、呼び出すことができました。 dfltweb1.onamae.com – このドメインはお名前.comで取得されています。 しかし、sfLoader#loadHelpersメソッドは、symfony1.2から非推奨になっており、タスクなどで使用すると次のようなメッセージが表示されます。 >> main The sfLoader::loadHelpers() method is deprecated. Please use the same method from sfApplicationConfiguration.ですので、このメッセージのとおり、sfApplicationConfigurationのメソッドを使用するように変更してみます。 まず、タスク

    symfony 1.2/1.3でタスクからヘルパーを利用する - しんふぉにゃん
    brtRiver
    brtRiver 2009/10/06
    タスクでヘルパーを呼び出す