LaravelでSmartyを使用する その2

Posted: 2014-10-13 13:01 |  laravel 
以前のリポジトリはそのまま残してありますが、
新しく拡張と、今後の追加対応予定も踏まえて新しく
Laravel.Smarty として移行しました
今後の機能追加と5対応はこちらのリポジトリで行います
他にもLaravelでSmartyを利用できるようにするパッケージが多くありますが、
このパッケージの一番の違いは、

Smartyの全てのメソッドが、Viewファサードに統合されている所です

View::make(); でレンダーがsmartyになるだけではありません!
develop-5リポジトリは、少し早いですが現時点のLaravel5に対応しています
現時点(2014/10/13)のLaravel5ではHtml, Formの二つのコンポーネントは、
オプションパッケージとして外されています。
つまり、ユーザーの好きなコンポーネントなり、用途にあったクラスなり用意して使ってね、
ということであり、
拡張も簡単でクラスを入れ替える事も意識しなくてもできるよ!ということです。

話が横道にそれましたが、
今回このパッケージで実装のヒントになる様にFormファサードをSmartyプラグインで
シンプル、且つ簡単に書くものを付属させました
{form}{/form}
で{{Form::open()}} ~ {{Form::close()}} になります
openで指定する引数は同じ様に指定するだけです
記述量が減りましたねw
実装としては
namespace Ytake\LaravelSmarty;

use Smarty;
use Illuminate\Html\FormBuilder;

/**
* Class SmartyPlugin
* @package Ytake\LaravelSmarty
*/
class SmartyPlugin
{
    /** @var FormBuilder */
    protected $form;

    /** @var Smarty */
    protected $smarty;

    /**
     * @param FormBuilder $form
     * @param Smarty $smarty
     */
    public function __construct(FormBuilder $form, Smarty $smarty)
    {
        $this->form = $form;
        $this->smarty = $smarty;
        $this->registerPlugin();
    }

    /**
     * @return void
     * @throws \SmartyException
     */
    protected function registerPlugin()
    {
        $this->smarty->registerPlugin("block", "form", [$this, "blockForm"]);
    }

    /**
     * @param $params
     * @param $content
     * @param \Smarty_Internal_Template $smarty
     * @param $repeat
     * @return string
     */
    public function blockForm($params, $content, \Smarty_Internal_Template &$smarty, &$repeat)
    {
        if (is_null($content)) {
            return '';
        }
        return $this->form->open($params) . $content . $this->form->close();
    }
}
これだけです
またパッケージ内も更にテストをしやすくする様に、Facadeは利用しないように変更しました
つまりLaravelじゃなくても動かそうと思えば動きます(動かす意味はありませんが)

他にも細々追加しまして、
View::make() などで描画する場合に、cache_idやcompile_idを明示的に指定する事が出来る様にしました
smarty.cache_id, marty.compile_id を配列で指定する事で
これらが利用されます
これらを指定して削除したい場合は、
$ php artisan ytake:smarty-clear-cache
などのartisanコマンドのオプションで指定するだけです
よりLaravelの機能を利用できる様に追加しました
artisanコマンドで、実行前に全てのテンプレートをコンパイルするコマンドを追加しました
他、コンフィグ関連で 'force_compile' をどうするか指定できる様にしたので、
本番環境で利用する場合に調整するといいでしょう!
次回追加予定のものは、Smartyのcacheをmemcached, Redisで管理するものを追加予定です
 

about ytake

執筆に参加しています


Laravel お役立ち情報

share



このエントリーをはてなブックマークに追加

Categories

laravel 45

DTM 0

music 0

PHP全般 31

0

JAPAN 1

WORLD 1

javascript 4

RDBMS 1

NoSQL 1

NewSQL 1

Recent Posts

Ad

comments powered by Disqus

GitHub

Social Links

Author


クリエイティブ・コモンズ・ライセンス
Yuuki Takezawa 作『Ytake Blog』はクリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス で提供されています。

© ytake/comnect All Rights Reserved. 2014