タグ

ブックマーク / kwski.net (32)

  • checkボックスを実装

    selectボックスに引き続いてcheckボックスの実装方法をおさらいしてみます。 コードは、CakePHP 2と1.3両方で実装可能です。デモ モデルは、こちらも以下 CREATE TABLE IF NOT EXISTS `prefectures` ( `id` INT NOT NULL AUTO_INCREMENT, -- id `prefecture` VARCHAR(8) NOT NULL, -- 都道府県 `area` VARCHAR(8) NOT NULL, -- 地方 PRIMARY KEY (`id`) ) 単体でon/offするcheckボックス 規定値を指定する場合は、checkedに指定します。チェックの場合はtrue(もしくは1)、チェックしない場合はfalse(もしくは0)を。 // ビュー echo $this->Form->input( 'yesno', ar

    checkボックスを実装
  • (メール・URL・電話・郵便・IP) データ バリデーション

    今回は、プロフィール情報に使用されるデータに絞ったバリデーションルールです。 バリデーションルール 以下の5つのバリデーションルールがコアに用意されています。 email メールアドレス url URL postal 郵便番号 phone 電話番号 ip IPアドレス email (メールアドレス) email(string $check, boolean $deep = false, string $regex = null) 第2引数$deepがtrueの場合、getmxrrもしくはcheckdnsrrもしくはgethostbynamelを使用してドメインの有無まで検証してくれます。第3引数$regexに正規表現を使用してドメインを限定してくれます。 public $validate = array( 'mailaddress' => array( 'rule' => array( '

    (メール・URL・電話・郵便・IP) データ バリデーション
  • 「isUnique」バリデーション

    「isUnique」は、特定カラムの一意性を検証してくれるメソッドです。 2.5.6からは、複数フィールドにまたがる一意性検証にも対応するようになったようです。 使用方法 public $validate = array( // 単一のフィールドに対する一意性を検証 'culumn_a' => array( 'rule' => 'isUnique', 'message' => 'culumn_a has already been taken.' ), // 複数のフィールドに対する一意性を検証 (AND) 'culumn_a' => array( 'rule' => array( 'isUnique', array( 'culumn_a', 'culumn_b'), false), 'message' => 'culumn_a & culumn_b combination has alre

    「isUnique」バリデーション
  • SQLクエリーをログに出力する

    SQLのクエリーをデバッグするには、Debug Kitを使用すればできますが、デバッグログと一緒に出したいのでやり方を調査してみました。 別々のログやビューでみるのもいいですが、秒単位で実行される処理もどちらが先に実行されたのかなどわかりやすくなるので、いいかなと個人的に思っています。 明示的に実行SQLをデバッグする モデル操作(find, save, deleteなど)の後に以下のコードを挿入すると実行SQLを(デバッグ)ログに出力させることができます。 $this->log( $this->[Model]->getDataSource()->getLog(), LOG_DEBUG); 出力先は自由に設定して下さい。 暗黙的に実行SQLをデバッグする DataSourcesをオーバーライドさせます。 MySQLの場合 1. MysqlLog.phpを作成(名前は自由に) // \app

    SQLクエリーをログに出力する
  • ログローテーション

    CakePHP 2.xではbootstrap.php内にあらかじめアプリケーションログの設定が書かれています。2.xで日付ごとにログファイルが切り替わるよう設定してみました。 日ごとにログを切り替える設定 app/Config/bootstrap.phpを以下のように変更もしくは追加して下さい。 // app/Config/bootstrap.php[変更or追加 後] /** * Configures default file logging options */ App::uses( 'CakeLog', 'Log'); CakeLog::config( 'debug', array( 'engine' => 'FileLog', 'types' => array( 'notice', 'info', 'debug'), 'file' => date( 'Ymd') . '_' . '

    ログローテーション
  • CakeEmailでメール送信(@gmail)

    CakePHP 2になって追加されたクラスCakeEmailがシンプルに使えます。これを使用してメール送信を行う処理を実装してみました。 CakeEmailクラスの読み込み /app/Config/bootstrap.php(全体的に使用する場合)もしくは各々の(使用する)コントロールに定義します。 App::uses( 'CakeEmail', 'Network/Email'); CakeEmailの設定 database.phpと同様、/app/Config下に設定ファイルが用意されています(email.php.default)ので、email.phpにリネームして下さい。そこに使用するメールサーバの設定を行います。以下はGmailからの送信設定を追加しています。 // /app/Config/email.php class EmailConfig { public $default

    CakeEmailでメール送信(@gmail)
  • パス定数と変更方法やURLの取得

    CakePHPは基的にはディレクトリそのまま配置することで構築が可能ではありますが、設定パスを変更することでセキュリティに考慮した構成にすることや運用性をもたせたものにすることが可能になります。 webroot/index.phpで設定する基パス ROOT -- アプリケーションのディレクトリパス APP_DIR -- アプリケーションのディレクトリ名 CAKE_CORE_INCLUDE_PATH -- Cakeライブラリへのパス WEBROOT_DIR -- webrootディレクトリ名 WWW_ROOT -- webrootディレクトリ絶対パス DS -- PHPのDIRECTORY_SEPARATORの短縮系。Windowsの場合は\ (バックスラッシュ)、 Linuxの場合は/ (フォーワードスラッシュ) ここで、「CAKE_CORE_INCLUDE_PATH」を変更することで

    パス定数と変更方法やURLの取得
  • バリデーションエラーメッセージの取得

    CakePHP 2.xになってバリデーションエラー時に返却されるメッセージのデータ形式が変更になったようです。1.3系では、ひとつのフィールドに対して返却されるメッセージは一つのルールのみですが、2.xではエラーとなったルールのメッセージが配列になって返されます。 複数ルールを設定して、全てのルールを実行する方法(2.x系・1.3系共通) バリデーションはモデルの$validateに設定した各ルールを上から行っていきます。デフォルトでは、ひとつのルールがエラーとなるとそのフィールドに対するバリデーションを停止しますが、'last'=>falseを設定するとエラー有無にかかわらず後続のバリデーションルールも実行するようになります。3つある場合は、1つ目・2つ目に設定するようなかたちになります。 // 例 var $validate = array( 'errormsgtest' => arr

    バリデーションエラーメッセージの取得
  • アップロードファイルのバリデーションルール

    CakePHP 2.2や2.3になってファイルアップロードに対するルールがコアバリデーションに追加されているようで、まとめてみました。 コアバリデーション 関連しそうなルールは以下の4つのようです。 fileSize - ファイルサイズについて mimeType - MIMEタイプについて uploadError - ファイルアップロードのエラー有無について extension - 拡張子について ファイルアップロードフォームから受け取るデータ配列 簡単なフォームの例 <?php echo $this->Form->create( 'File', array( 'type'=>'> file', 'enctype' => 'multipart/form-data', 'url'=>'/upload/')); echo $this->Form->input( 'image', array(

    アップロードファイルのバリデーションルール
  • HttpSocketを使用してリクエスト送信

    CakePHPには、Webサービスへのリクエスト送信のためのHttpSocketクラスが用意されています。 HttpSocket get HTTP GETリクエストを発行します。デモ function getlandmark(){ $client_id = <Client ID(48桁の英数字:要取得)>; $client_secret = <Client Secret(48桁の英数字:要取得)>; App::uses( 'HttpSocket', 'Network/Http'); $HttpSocket = new HttpSocket( array( 'ssl_verify_host' => false)); $url = "https://api.foursquare.com/v2/venues/search?"; $params = array( 'll' => $this->da

  • コントローラ内でバリデーション処理を呼び出す

    CakePHPでは、saveメソッドの際にバリデーション処理も自動で行われますが、save処理と切り離してバリデーションを行うこともできます。このときは、save時と若干異なる処理体系になります。 バリデーションをsaveから切り出して行う ポイントは、1.のvalidatesの前にデータ($this->request->data)をdataをModelにsetする必要があるところです。(「若干異なる処理体系」とはここのことです。)この処理を行わないとvalidatesは常にtrueを返します。 validatesメソッド内で、invalidFieldsメソッドが呼び出されます。このメソッドは[Model]->validationErrorsにバリデーションのエラーメッセージ(message)を格納します。バリデーションNGの場合、ここからメッセージの取り出しが可能です。 // 1. モデ

    コントローラ内でバリデーション処理を呼び出す
  • マウスオーバーすると画像にキャプションを表示してくれる「Mosaic」

    「Mosaic」は、画像などにマウスオーバーすると、キャプションをスライド(イン/アウト)もしくはフェイド(イン/アウト)させてくれるjQueryプラグインです。ダウンロードはこちら スクリプト <link href= "mosaic.css" type="text/css" rel="stylesheet"> <script src="jquery.min.js" type="text/javascript"></script> <script src="mosaic.1.0.1.min.js" type="text/javascript"></script> 実装 <div class="mosaic-block bar3"> <a class="mosaic-overlay" href="#"><div class="details">キャプション</div></a> <a clas

    マウスオーバーすると画像にキャプションを表示してくれる「Mosaic」