CakephpのFormHelperでselectタグの空行オプション

Cakephp 2.6でFormHelperを使うとformが楽にかけたりします

    $options = [1,2,3,4];
    $this->Form->select('field', $options));

みたいな感じです
デフォルトで空行が出るので出さなくするには

    $options = [1,2,3,4];
    $attr = ['empty' => false];
    $this->Form->select('field', $options, $attr));

なんてするとなくなるし

    $options = [1,2,3,4];
    $attr = ['empty' => 'this is empty'];
    $this->Form->select('field', $options, $attr));

とすると空のvalue値の表示が指定できます

なんかないかなーってときは、
Class FormHelper | CakePHP
見るのがわかりやすいと思います

CakephpのFormHelperでチェックボックスを複数用意する

Cakephp 2.6で、FormHelperでチェックボックスを複数表示したのでメモ

echo $this->Form->create('sample'); 
$option = ['サンプル', 'サンプル2'];
echo $this->Form->select('item', $option, array('multiple' => 'checkbox'));
echo $this->Form->end(); 

な感じでチェックボックスが複数出せませす

初期値をつけるのなら

$this->data[‘sample’][‘item’][0] = 0;
$this->data[‘sample’][‘item’][1] = 1;

とか$optionのインデックスの値を渡してやればチェックがつきます

$data = $this->Model->find(‘all’)

(int) 0 => array('sample' => array('item' => '1')),
(int) 1 => array('sample' => array('item' => '2')),
(int) 2 => array('sample' => array('item' => '3')),
(int) 3 => array('sample' => array('item' => '4')),

な感じでくるので、

$selected = [];
foreach ($data as $obj) {
    $selected['sample']['item'][] = $obj['sample']['item'];
}

でViewに渡してあげたらチェックセットされました

Cakephpでajaxを使って非同期にすっきりpostする

CakephpでFormの値をjQueryを使って非同期にpostの値を渡してみました

まずViewでformをつくります

echo $this->Form->create('sample');
echo $this->Form->checkbox('test');
echo 
// などなど..
echo $this->Form->end();

formのsubmitイベントで、phpへpostします
jQueryのserializeをつかって、formの値をクエリ文字列にします
.serialize() | jQuery API Documentation

$('form').on('submit', function() {                                                               
    event.preventDefault();                                                                       
    event.stopPropagation();                                                                      

    $.ajax({                                                                                      
        type: 'POST',                                                                             
        url: '<?php echo $this->Html->Url(array('action'=>'save'));?>',                   
        data: { data: $(this).serialize() },                                                      
    }).done(function(data) {
        // 後処理                                                                      
    });                                                                                           
});     

コントローラーのsaveアクションへアクセス
これで
$this->data
にふつうのformのpostした値が入ってきます

public function save()
{
    $this->layout = null;
    parse_str($this->data);

    $ret = $this->SomeModel->saveAll($data);
    // などなど..
}

PHP: parse_str – Manual
で、クエリ文字列を変数に落とし込めばそのまま
$dataにまるごとデータが入ってきます
(jQueryでdata: で渡したので)

だいぶCakeらしくできた気がします

vagrant上のECCUBEでオーナーズストアを自身にするとエラーが発生する

ECCUBEの公式サイトに公開されてないプラグインをインストールする際、
オーナーズストアを一旦自分のサーバーに変更してするような手順があったのでためしました

ECCUBEの管理画面へログインして、システム設定>パラメータ設定で

  • OSTORE_URL
  • OSTORE_SSLURL

がオーナーズストアのアドレスです
ここを

“myowersstore/”

とかにする指示で、これで
http://localhost:8080/myowersstore/
がオーナーズストアのアドレスになるのですが、オーナーズストア>モジュールの一覧でモジュールの取得を押すと

エラー発生

2015/03/16 20:24:27 [/upgrade/index.php] * error! code:2002 / debug:O:10:"PEAR_Error":8:{s:20:"error_message_prefix";s:0:"";s:4:"mode";i:1;s:5:"level";i:1024;s:4:"code";i:111; s:7:"message";s:18:"Connection refused";s:8:"userinfo";N;s:9:"backtrace";a:6:{i:0;a:6:{s:4:"file";s:35:"/vagrant/mobax/data/module/PEAR.php";s:4:"line";i:542;s:8:"function";s:10:"PE AR_Error";s:5:"class";s:10:"PEAR_Error";s:4:"type";s:2:"->";s:4:"args";a:5:{i:0;s:18:"Connection refused";i:1;i:111;i:2;i:1;i:3;i:1024;i:4;N;}}i:1;a:7:{s:4:"file";s:41:"/vagrant/mob ax/data/module/Net/Socket.php";s:4:"line";i:185;s:8:"function";s:10:"raiseError";s:5:"class";s:4:"PEAR";s:6:"object";O:10:"Net_Socket":14:{s:2:"fp";N;s:8:"blocking";b:1;s:10:"persis tent";b:0;s:4:"addr";s:9:"127.0.0.1";s:4:"port";i:8080;s:7:"timeout";b:0;s:10:"lineLength";i:2048;s:7:"newline";s:2:"
・・・

サーバー自身からlocalhost:8080へアクセスできない様子(そらそうだ)

  • OSTORE_URL
  • OSTORE_SSLURL

“http://localhost/myowersstore/”

にしてやるとうまくいきました

PEARがおかしい?socketが使えない?などはまりました..