タグ

ブックマーク / www.exgear.jp (10)

  • CakePHP コントローラーのアクションをコンポーネントにまとめる : エクスギア Blog

    業のほうが忙しく久々の更新になってしまいましたが小ネタです。 Cakeを使っていると最初はbakeやscaffoldを利用する機会がありますが、序々に利用頻度が減ってきました。(現在では殆ど使っていません) 理由としては、社内での共通のルールであったり、プロジェクト毎の特性を反映した雛型から複製して作成したほうが効率的になってきたということが大きいと思います。 ただ、bakeでの自動生成や複製方式だと初回は良いのですが、大規模なものになってくると、同様のソースが点在し一括での改修などが面倒なことになってきます。 ということで、明らかに同様の処理はscaffold風にコンポーネント化することにしました。 ※コンポーネントからコントローラーを制御する場合は、ロジックが分散すると見通しが悪くなりますので、ロジック全体を委譲できる場合に利用することをお勧めします。 実装例 今回の例として、

  • Gitで更新時にメールを送信する : エクスギア Blog

    社内のソースバージョン管理でgitも使ってみようということで、開発メンバーが利用できるようにgit環境を構築しています。 subversionで管理しているときは、commit時にcommitの概要をMLにメールを送信するようにしていました。メールが届いたから何かをするわけではありませんが、commit内容をわざわざ報告しなくてもMLで共有できるので便利です。 gitでも同様のことができまるようにしてみました。gitの場合は複数のリポジトリが存在しますが、情報が欲しい情報のはみんなが共有しているリポジトリの更新内容です。なので、共有リポジトリに対してのみ設定を行います。 hooks/post-updateでフックする subversionの場合はリポジトリの/hooks/post-commitで好きな処理を行うことができます。gitの場合もpost-commitがあるのですが、開発メンバー

    bojovs
    bojovs 2009/08/27
  • CakePHP IRC集会に参加しました : エクスギア Blog

  • CakePHP MySQLのバックアップ(mysqldump)を行うバッチ : エクスギア Blog

    CakePHP1.2からコマンドラインからCakeが起動できるようになりました。 この機能を使って、MySQLのバックアップを行う簡単なスクリプトを作成してみました。 データベースの接続には、/app/config/database.phpの接続情報を利用しています。 ソースコード:mysqldump.php /app/vendors/shells/mysqldump.php class MysqldumpShell extends Shell { // データベース設定ファイルの定義名 var $database_config = 'default'; function dump(){ Configure::write('debug', 0); App::import('Core', 'ConnectionManager'); $db =& ConnectionMana

  • CakePHP 動的なウィジェットの作り方 : エクスギア Blog

    CakePHPではコントローラーでの処理はビューを介してレイアウトのメインコンテンツ($content_for_layout)の部分に展開されます。 その際レイアウトに配置してあるメインコンテンツ以外の部分は基的にはコントローラーから操作ができません。(たぶん) 一般的なサイトでは2段組みや3段組みのレイアウトを使うケースが多いと思いますが、メインコンテンツ領域以外もCakeを使って柔軟に制御する方法を検討します。 (出力されるHTMLの部品をウィジェットとします) ※今回の実装サンプルはこちらから確認できます。 ※ソースコードはこちらからダウンロードできます。 ※サンプルではメインコンテンツ側で指定されたカテゴリの情報をフッター部に表示しています。 実現したい機能 ・レイアウトは1枚で管理できること(デザインの保守性の為) ・コントローラーやビューからウィジェットの表示・非

  • CakePHP Behaviorでバリデーション周りの効率化を図る 応用編 : エクスギア Blog

    前回紹介したBasicValidationBehaviorを使って、動的にバリデーションを切り替える方法を紹介します。 共通のモデルを複数のフォームで利用している場合にバリデーションの定義を動的に変更したい場合などに有効です。 例1:新規登録時と編集時でバリデーションの登録項目を変更する 対応1)loadValidate()メソッドに引数を追加し、条件によって分岐させる [モデル内の処理] function loadValidate($action = 'add') { $valid = array( 'name'   => 'required | maxLen[50]', 'email'         => 'required | email | isUnique | maxLen[200]', 'password'  => 'required | single | maxL

  • CakePHP Behaviorでバリデーション周りの効率化を図る : エクスギア Blog

    CakePHPでバリデーションを使う際、標準(CakePHP1.2)のままでも十分開発はできますが、大きめのプロジェクトや複数のプロジェクトでも汎用的かつ効率的に使えるようにできないかと検討しました。 バリデーション改善の目的 エラーメッセージを日語化し共通化・デフォルト化したい 独自バリデーションメソッドを共通化したい ルール配列を簡単に記述したい(項目が多いとソースが長くなり過ぎて見通しがよくない) バリデーションの前に自動で整形処理をしたい(半角英数変換やカタカナ変換など) 実装にあたって バリデーションメソッドの共通化については、 cakephperさんの日記:よく使う独自バリデーションルールをプラグインのbehaviorにまとめる に記載してありますように、プラグインのbehaviorで管理するほうが良いと思いますが、今回は弊社で過去に実装した通常のbehavior(Bas

  • CakePHP Formヘルパの拡張 その2 3項目の電話番号入力フィールド : エクスギア Blog

    $form->textを拡張して3項目の電話番号入力フィールドを生成 前回に続いて、Formヘルパの拡張の第二弾です。 入力欄としてよくあるものとしては、電話番号や郵便番号を分割された入力フィールドで入力させるケースがあります。 入力フォームはモデル(テーブル)と連携するケースが多いですが、テーブルのカラムが1つなのに入力フォームは分割しなければならない場合などは、少々面倒なことを行う必要があります。 この煩わしさを回避する為に、カラムは1つでも入力欄は3つに自動的に分割されるようにに拡張する方法を検討しました。 結論から言えば、ヘルパだけの拡張では入力欄を分割するところまではできましたが、DBに格納する際に自動的に分割した値を結合することができませんでした。 (イマイチな)解決案として、AppModel内に処理を追加することでDB格納時の自動結合化を行っています。 動作はこちらか

  • CakePHP Formヘルパの拡張 その1 日本語日付選択プルダウン : エクスギア Blog

    $form->datetimeを拡張して日語の日付選択プルダウンを生成 CakePHP1.2のFormHelperには日付をプルダウンメニューで選択する機能があります。 生年月日の入力などに重宝しますが、日付の書式が英語なので日の日付形式に変更する必要があります。 そこで、Formヘルパを拡張してExformヘルパクラスを生成し、独自メソッド内で日語化対応を実施します。 動作はこちらから確認できます。 準備 Exformヘルパ(exform.php)のソースは最後に記載してあります。 このファイルを app/views/helpers に配置。 コントローラーの先頭のヘルパ定義時に、標準のFormヘルパとセットで呼び出します。

  • CakePHP HABTMモデルの検索 : エクスギア Blog

    HABTMで関連付けされたテーブルを検索条件に加えたい場合、一回のfindメソッドで取得しようとすると、joinの設定やグループ化で面倒な実装が必要になってきます。 データ量にもよりますが、 1)関連テーブルを先に検索し、ID配列を取得 2)ID配列を検索条件に追加 としたほうが簡単に実装できるケースが多そうです。 例として、以下のモデルを使って検証します。 (料理が複数の材と関連付けされている) 料理テーブル(モデル名:Cooking) - id - name - category_id 材テーブル(モデル名:Food) - id - name 料理-材関連付けテーブル(モデル名:CookingFood) - id - cooking_id - food_id 料理のカテゴリID=3 AND 材ID=5 で検索する場合では、 まず、関連付けテーブルから対応

  • 1