読者です 読者をやめる 読者になる 読者になる

Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

Hiddenで配列を渡してゲットしたい

CakePHP

ま、そんなこともあるよね、人間だもの。良くわかんないけどこんなんでいいんジャマイカ。

hiddenで配列を作るためには、こんな感じにしなくてはならぬ。

<input type="hidden" name="hoge" value="1"/>
<input type="hidden" name="hoge" value="2"/>
<input type="hidden" name="hoge" value="3"/>

とりあえずこうやってみた。

<?php echo $form->hidden("hoge",array("value"=>1))?>
<?php echo $form->hidden("hoge",array("value"=>2))?>
<?php echo $form->hidden("hoge",array("value"=>3))?>

だけどcakeの仕様でこうすると値を上書きしちゃうので、配列でとれない。

で、Viewにベタ書きとか流行んないから、hiddenで吐き出すヘルパーを作った。

<?php  
 function hiddenArray($keyName, $data) {
    $html ="";
    	if(is_array($data)){
	    	foreach ($data as $v){
		    $html .= sprintf('<input type="hidden" name="%s" value="%s">', h($keyName),h($v));
   		 }
   		 $html .= "\n";
	    }
      }
    return $html;
  }

Viewに吐き出す時はこう。

<?php
  echo $hogeHelper->hiddenArray('hoge[]', $data); ?>

で、Controllerで受け取る時は、これで取得できる。

<?php
  $this->params->['form']->['hoge'];

いじょ。

P.S

HTMLエスケープのご指摘を頂いた。危ない、危ない。h()で囲えばおkのはずなので、明日確認する。