CakePHP input テキストフォームのサイズを変更

PHP

CakePHPテキストフォームのサイズを変更

フォーム要素の自動生成で、フォームヘルパーを利用した際、テキストの入力ボックスのサイズの指定です。
なぜかマニュアルには記載がなかったので、書いておきます。

オプションの指定に’size’を指定しましょう。

 例
 echo $form->input('age',array(
                           'size' =>'3'

)

                  );

CakePHP htmlヘルパーでリンクを出力する

PHP

CakePHP htmlヘルパーでリンクを出力する

いつも忘れてしまうので、メモです。

 link(string $title, 
    mixed $url = null, 
    array $options = array(), 
    string $confirmMessage = false)

1番目の引数がリンクされる文字、2番目の引数がリンク先のURLを出力するパラメーター、3番目の引数がオプションのパラメーター(なくてもよし)、4番目がクリックすると表示されるメッセージ(なくてもよし)です。

2番目、3番目はそれぞれ配列にすることができます。

 //例
 <?php echo $this->Html->link( 'クリックしてね',    
         array('controller' => 'コントローラー名', 
               'action' => 'アクション名', 
               渡したいパラメーター),
        array('class'=>'link_style'),    
       "本当にクリックしていいの");
 ?>

公式マニュアルサイト
http://book.cakephp.org/ja/view/1442/link

CakePHP findで取得する関連データを選別

PHP
CakePHP 1.3

CakePHP findで取得する関連データを選別

CakePHPのよいところは、関連するデータを簡単に取得できるところですが、時に多くの関連データを取得してきたり、または取得したいデータを取得できなかったり、自由が効きません。

しかし!containerというビヘイビア(コンテイナブル)を使えば、両方の悩みが解決します。

次のようなモデルがあるとします。

 クラス名:Student(弟子)
 テーブル名:students
 id       name
 1        孫悟空
 2        ヤムチャ
 3        天津飯
 クラス名:Teacher(師匠)
 テーブル名:teachers
 id       name
 1        亀仙人
 2        桃白白
 3        カリン様
 クラス名:Teacherskill(師匠の必殺技)
 テーブル名:teacherskills
 id       name
 1        かめはめ波
 2        どどん波
 3        体力回復

Studentは多くのTeacherを持つことができ、Teacherは一つのTeacherskillを持っています。
他にも多くのStudentAddress(弟子の住所)などの複雑なデータ構造があるとします。

さて、Studentクラスから、Teacherskillの名前を取得しようとします。
デフォルトのfindを利用した取得はかなり複雑で、多くの関連データを取ってきてしまいます。
今までは、それを制御するのにrecursiveや、unbind、bindを利用していましたが、それより簡単です。

コンテイナブルを利用して、次のように書けます。

 //students_controller内
 $this->Student->Behaviors->attach('Containable');
 
 $this->Student->find('all', 
          array('contain' => array(
                'Teacher' => array(
                    'Teacherskill'
                     )
                   )
                )
 );

参考:
http://book.cakephp.org/ja/view/1323/%E3%82%B3%E3%83%B3%E3%83%86%E3%82%A4%E3%83%8A%E3%83%96%E3%83%AB

CakePHP alphaNumericのバリデーションで日本語も許可してしまう

PHP
CakePHP2.5.6

CakePHP alphaNumericのバリデーションで日本語も許可してしまう

CakePHPのよいところの一つが、バリデーションが簡単にできるところですが、alphaNumericは半角英数字だけのバリデーションではありません。
「文字列と数字」なので、日本語もOKになっています。

なので、下記のようにすると、日本語も通してしまいます。

 public $validate = array(
 	'customer_cd' => array(
 		array(
 			'rule' => 'alphaNumeric', 
 			'message' => '名前は半角英数字にしてください。'
 		)
 	)
 }

下記のように、正規表現を利用して、半角英数の判定をしましょう。

 public $validate = array(
 	'customer_cd' => array(

array(
‘rule’ => ‘/^[a-z0-9]{3,}$/i’, //半角英数字のみ
‘message’ => ‘名前は半角英数字にしてください。’
)
)

 )