Laravel4でSmartyを使用する

Posted: 2014-06-01 21:09 |  laravel 

■Laravelでもsmartyを使いたい!

Laravel4でblade以外のテンプレートを使用するにはいくつか方法があります。
view出力の処理を直接変更して使う事もできます。
packageもいくつかあります。
ですが、どれも設定ファイルを追加したり、クラスを追加して書き換えたり、
またはパッケージの中にsmartyが直接内包されていて、
本家に変更があったときに修正が発生するため、フレームワークにも手を入れず、
且つsmartyに慣れている方であれば、functionもそのまま使いたいハズなので、
パッケージを作って公開中です。(もう半年くらい前ですが)
すでにLaravelを使ってる方であれば、もう不要かも知れません。
php5.4以上が対象です。 comnect/smarty ytake/laravel-smarty

■インストール/install

composer.jsonに追加してください。
// for Laravel5.0
"require": {
    "ytake/laravel-smarty": "2.*"
},
// for Laravel4.2
"require": {
    "ytake/laravel-smarty": "1.2.*"
},
// for Laravel4.1
"require": {
    "ytake/laravel-smarty": "1.1.*"
},
そのうちvendor名がcomnectではなくytakeになるかもしれませんが・・・
app/config/app.phpのprovidersに
'Ytake\LaravelSmarty\SmartyServiceProvider'
を追記してcomposer updateしてください。
インストール完了後、artisanコマンドでコンフィグをパブリッシュします。
$ php artisan config:publish ytake/smarty
実行後にapp/conig/packagesの下にytake/smarty/config.phpが作成されます。
コンフィグは、smartyのコンフィグと同様のものです。
// smarty configure
return [
    // smarty file extension
    'extension' => 'tpl',
    //
    'debugging' => false,
    // use cache
    'caching' => false,
    //
    'cache_lifetime' => 120,
    //
    'compile_check' => false,
    // delimiters
    // default "{$smarty}"
    'left_delimiter' => '{',
    'right_delimiter' => '}',
    // path info
    'template_path' => app_path() . '/views',
    'cache_path' => app_path() . '/storage/smarty/cache',
    'compile_path' => app_path() . '/storage/smarty/compile',
    'plugins_paths' => [
        app_path() . '/Portal/smarty/plugins',
    ]
];
拡張子やデリミタ、キャッシュ時間やコンパイルの確認等の指定ができます。
デフォルトではapp/storageの下にcacheとcompileが出力されますので、
app/storageに必ず実行権限を与えてください
これだけで後は、View Facades(proxies)を通じて、smartyのメソッドが利用可能です。

■値の代入は、
\View::assign('name', 'value');
いくつ書いても構いません。
■値の破棄は、
\View::clearAllAssign();
など、smartyのfunctionはすべてそのまま使用できます。
View関連で定義されていないメソッド(__call)はリフレクションでsmartyのメソッドを調べるようになっています。
出力するviewの指定は、通常のbladeと同様に、
// テンプレートの指定
return \View::make('template');
// または値も一緒に
return \View::make('template', ['values' => $values]);
// withでも同じです
return \View::make('template')->with('values', $values);
あまりassignは使用しないかもしれません。
他にもaritsanコマンドでキャッシュ、コンパイルファイルの削除ができます。
■キャッシュファイル削除
$ php artisan comnect:smarty-cacheclear
デフォルトではすべてのsmarty cacheファイルが削除されますが、
オプションで下記の指定が可能です。
--file (-f) specify file / 削除したいファイルを指定
--time (-t) clear all of the files that are specified duration time / cacheの経過時間を指定して削除
■コンパイルファイル削除
$ php artisan comnect:smarty-clear-compiled
コンパイルファイルもキャッシュ同様、デフォルトですべて削除します。
オプションでは下記が指定できます。
--file (-f) specify file / 削除したいファイルを指定
他、tplファイルでは、Laravelのファンクション、facadesはもちろん、
smarty modifier, sumarty functionなどすべて使用可能です。
ただし、配列で記述する場合はショートシンタックスのみ対応となります。
また、記述時に以下の点に注意する必要があります。
// blade構文記述でデリミタにスペースを加えると、smartyでエラーと見なされます。
{{ Form::open() }}
// blade構文を使用する場合はデリミタにスペースを使用しないでください
{{Form::open()}}

// smartyのifを使う場合は下記のようになります
{if Auth::user()} {/if}
また、@は使用できません。
値へのアクセスは配列、またはオブジェクトでアクセスできますので、
特に意識する必要はありません。
レイアウト対応はsmartyのブロックを使用する事ができますので、
普段からsmartyを利用されている方は簡単に使用できます。


使用して、気軽にプルリクエスト等を送ってもらえれば幸いです。

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