JavaScript側にPHP変数を簡単にまるごと渡す方法 #FuelPHPAdvent2013

ハイ、昨日のオレに引き続きFuelPHP Advent Calendar 2013の6日目です。

今回の内容もまたTwig絡みです。実は昨日の記事は、本日の記事の前準備になっていたのでした。

JavaScript側にPHPのオブジェクトを渡したい


WebUIJavaScriptjQueryjQuery使使


UIJavaScriptTwig Extension

data_bind関数


HTMLJSON便

extension
<?php
class Hoge_Twig_Extension extends Twig_Extension
{
  :
    public function getFunctions()
    {
        return array(
            new Twig_SimpleFunction('data_bind', array($this, 'dataBind')),
            );
    }

    public function dataBind($name, $val, $exclude = null)
    {
        if (is_object($val) && is_callable(array($val, 'to_array'))) {
            $val = $val->to_array();
        }
        if (!empty($exclude)) {
            if (is_string($exclude)) {
                $exclude = array($exclude);
            }
            foreach ($exclude as $key) {
                unset($val[$key]);
            }
        }
        $fmt = '<div id="data-%s" class="hide">%s</div>';
        return sprintf($fmt, $name, json_encode($val));
    } 
}

div'hide'classCSS
.hide {
  display: none;
}

Bootstrapstyle



<?php
 :
  function action_xxx()
  {
    :
    // $userinfo は情報が入ったObjectまたは連想配列
   $this->template->user = $userinfo;
  }


{{ data_bind('user', user) }}

JavaScript使jQuery
  var user = $.parseJSON($('#data-user').text());

userPHP

パラメータの解説

data_bind 関数は3つのパラメータを持ちます。

$name: 名前

HTML上で展開される名前です。'data-名前' がその要素のidになります。

$val: 変数

展開する変数です。Twigの変数になります。

$exclude: 排除するキー (省略可能)

JS3


{{ data_bind('user', user, 'password') }}


{{ data_bind('user', user, ['password', 'rank']) }}


 tips @[W] FuelPHPWeb | Work Tool Smith []



12/8 
HTMLjson_encode()Twig_Function_Method  @  Twig_SimpleFunction 
FuelPHPView - Blog::koyhoge