Cake+PHP+現在ログインしているユーザーIDを取得

PHP

Cake PHP チェックボックス ヘルパーを使用する

cake PHP 1.2.3.8166.

CakePHPの本サイトに書いてあった例がちょっとわかりにくかったので、書いておきます。

http://book.cakephp.org/view/713/checkbox

ビュー(見かけ)については、ヘルパー(helper)というクラス達によって、読んで字の如く、簡単に作成ができます。
フォームを作成するための$formもその一つです。

で、本題のcheckboxです。

 例:name属性がcolor、値をyellowとredの二つのチェックボックスを作りたい場合
 
 $form->checkbox('color',array('value'=>'yellow')
 $form->checkbox('color',array('value'=>'red')

なんか、もっとすっきりできるといいんですけどね。
ちょっと残念です。

関連

Cake PHP HABTMのデータをチェックボックスに表示する

Cake PHP 電話番号のバリデーションルール

PHP

CakePHP電話番号のバリデーションを作る

CakePHPには ’phone’ という電話番号のバリデーションがありますが、米国式のため、日本の電話番号のバリデーションとしてはいまいち使えません。

日本の電話番号に対応したルールを下記のように作ります。

 //モデルに記述
 var $validate = array(
  'tel' => array(
      'rule'=>array('custom','/\d{2,4}-\d{2,4}-\d{4}/'),
      'message'=>'電話番号を正確に入力してください。'
        )
  );
  • 日本の市外局番に5ケタのものが存在するようです。 — uechoco {2010-09-29 (水) 12:44:37}
  • 5ケタですか、ご指摘ありがとうございます。すみませんが、正規表現を適宜変更して利用してみてください。 — 中の人 {2010-09-29 (水) 17:56:02}

Cake PHP 関連モデルの入力フォーム name 以外の値を入れる

PHP

Cake PHP 関連するデータのプルダウンリストでの入力フォームを、”name”以外のフィールドについて作る

 

CakePHP 1.2.3.8166

モデル同士の関連がうまく結びついていれば、入力フォームは自動的に出てきますが、name 以外のフィールドを選択肢にしたい場合、次のようにします。

 

例 プロジェクト(Project)とドキュメント(Document)が結びついている場合、ドキュメントの追加フォームでプロジェクトのプロジェクト名(Project.name)を入力させたい場合のコントローラーとビューファイル

 //document_controller.php 内
 function add() {
 	if (!empty($this->data)) {
 		$this->Document->create();

if ($this->Document->save($this->data)) {
$this->Session->setFlash(

                                     __('The Document has been saved', true)
                                );
        $this->redirect(array('action'=>'index'));
 	} else {
           $this->Session->setFlash(__('The Document could not be saved. Please, try again.', true));
          }
    }
 //ここはリストだけでOK
 $projects = $this->Document->Project->find('list')
 }
 //add.ctp 内    
 echo $form->input('projects');
 

でちゃちゃっと、出してくれます。
しかし、プルダウンリストの中をProject.name以外の選択肢にさせる場合は次のようにします。

例 プロジェクト(Project)とドキュメント(Document)が結びついている場合、ドキュメントの追加フォームでプロジェクトのプロジェクト名ではなく担当教師名(Project.teacher_name)を入力させたい場合のコントローラー

 //document_controller.php 内
 //Projectから取得するデータを下記のように指定する
 $projects = $this->Document->Project->find('list',
 array(
    'fields' => array(
 	  	      'Project.id','Project.teacher_name'
                      )
      $this->set(compact('projects'));
 }

ビューファイルは変更しなくても、これでOKです。

注意:このままだと関連データとしてSaveされないので、Saveの部分を作る必要があります。

Cake PHP 運用時にSQL文を表示させないようにする

PHP

CakePHP SQL文を表示させないようにする

cake PHP 1.2.3.8166.

普通に開発しているときには、CakePHPがしてくれてるSQL文を表示してくれるので便利ですが、もちろん本番で運用するときにはそんなものは表示したくないですよね。

その場合は、下記の設定ファイルを編集します。

/app/config/core.php

 //1以上だとメッセージが表示されるので、0にする
 Configure::write('debug', 0);

Cake PHP 複数のバリデーションルールを設定する

PHP

CakePHP 複数のバリデーションルールを設定する

cake PHP 1.2.3.8166.

複数のバリデーションルール(ユーザーの入力をチェックするアレです。)を一つの項目に設定する方法です。
本家サイトでも載ってますが、少しわかりづらかったので補足的に。
http://book.cakephp.org/ja/view/133/Multiple-Rules-per-Field

たとえば電話番号を入力必須かつ正確な電話番号を入力させたい場合です。

 'tel' => array(
         'notempty',
         'tel'=>array(
 	         'rule'=>array('custom',
                               '/\d{2,4}-\d{2,4}-\d{4}/'),
                 'message'=>'電話番号を正確に入力してください。'
                      )
 ),
  • 複数バリデーションの実装が上手くいかないので、試させて頂きましたが、バリデーションとして機能しないみたいです。※何を入力してもエラーメッセージが返されます。ちなみにこちらはのcakeのver1.3ですので、バージョンが違うからでしょうか — {2011-10-10 (月) 15:37:27}
  • すみません、今手元に検証できる環境がないので何とも言えませんが、まずは単純なバリデーションを本家サイトのマニュアル通りにやってみては如何でしょうか?この例だと、カスタムルールですので。 — 管理者 {2011-10-11 (火) 10:31:58}