cakephp2.doc_053
最終投稿日:2019年11月20日
【基本】
[app][View][Helper]
ファイル名は、頭大文字の任意文字 + Helper.php となる。
例)
MyformHelper.php
<?php
//AppHelper を読み込む
App::uses('AppHelper', 'View/Helper');
//AppHelper を継承したクラスを宣言する
class MyformHelper extends AppHelper {
//処理中に既存のヘルパーを使用したい場合はここで宣言する
public $helpers = array('Form');
[app][Controller]
public $helpers = array('Html', 'Form','Myform');
【サンプル】
<?php
App::uses('AppHelper', 'View/Helper');
class MyCheckHelper extends AppHelper {
var $helpers = array('Form');
//自作のメソッド
public function input($fieldName, $options = array()){
//チェックボックス
if(isset($options["multiple"]) and $options["multiple"] == "checkbox"){
//普通にFormヘルパーで checkbox タグを生成する
$result = $this->Form->input($fieldName, $options);
//タグを改行文字で配列にする
$tags = explode("\n",$result);
$result = "";
foreach($tags as $val){
//対象の div タグがあれば処理(バリデートエラーの div もケアする)
if(strpos($val,'<div class="checkbox">') !== false
or strpos($val,'<div class="checkbox form-error">') !== false){
//タグを削除する
$val = str_replace('<div class="checkbox">','',$val);
$val = str_replace('<div class="checkbox form-error">','',$val);
$val = str_replace('</div>','',$val);
}
//タグを結合する
$result .= $val;
}
//戻す
return $result;
//セレクトボックス
}else if(isset($options["type"]) and $options["type"] == "select"){
foreach($options["options"] as $key => $val){
//半角にする
$options["options"][$key] = mb_convert_kana($val,"k","UTF-8");
}
}
//普通にFormヘルパーで select タグを生成する
$result = $this->Form->input($fieldName, $options);
return $result;
}
}
?>
【メモ】
foreach($tags as $val){ の $tags をダンプすると以下となる
array(6) {
[0]=>
string(133) "
<div class="input select">
<label for="TestHoge2">Hoge2</label>
<input type="hidden" name="data[Test][hoge2]" value="" id="TestHoge2">"
[1]=>
string(0) ""
[2]=>
string(139) "<div class="checkbox">
<input type="checkbox" name="data[Test][hoge2][]" value="1" id="TestHoge21">
<label for="TestHoge21">a</label></div>"
[3]=>
string(139) "<div class="checkbox">
<input type="checkbox" name="data[Test][hoge2][]" value="2" id="TestHoge22">
<label for="TestHoge22">b</label></div>"
[4]=>
string(139) "<div class="checkbox">
<input type="checkbox" name="data[Test][hoge2][]" value="3" id="TestHoge23">
<label for="TestHoge23">c</label></div>"
[5]=>
string(6) "</div>
"
}
【本サイトで使用している自作ヘルパー】
MyBsCssHelper
CSSのフレームワーク『Bootstrap』用の Class を自動で出力する
//ドキュメント上段のタイトル文字用
$this->MyBsCss->input("CakePHP Auth 認証",array("bs_type"=>"title"))
//[Back]リンク
$this->MyBsCss->link("Back",array(
"controller"=>"mycomponents","action"=>"cakephp_index"),array("bs_type"=>"back"))
//ドキュメント内の各タイトル([target]は連番で記述していく)
$this->MyBsCss->input("CakePHP1.3",array("bs_type"=>"index","target"=>1))