Zend FrameworkからLaravelに移行する話(1)
はじめに
お仕事で、Zend Frameworkのバージョンアップをしなければならなくなった・・と思ったら、Zend Frameworkはもうなくて、Laminas Projectに移って新たなフレームワークとして公開されている。 しかし、Laminas MVCでは必要な要件を満たさないことが分かってとん挫していた。
そこで、次の候補としてLaravelを挙げて、必要な要件を満たせるかどうかを一歩ずつ調査していく。
要件(1)
まず最初の要件は、「Smartyが使えること」。
元のソースコードはSmartyをバリバリ使っているので、これを別のビューエンジンに移植するのは大変、ということで、Smartyが使えるならありがたい。プラグインなども非常に便利だし。
導入
まずはプロジェクトの作成。
composer create-project --prefer-dist laravel/laravel:11.* laravel-setup-1-smarty cd laravel-setup-1-smarty chmod -R a+w storage/ chmod a+w bootstrap/cache
実行時点でLaravel 12が出ていたのだが、後述のコンポーネントがまだ対応していないので、Laravel 11を明示してインストール。
続いて、作成したプロジェクトに対して必要なコンポーネントをインストールしていく。 GitHub - ytake/Laravel.Smarty: smarty template engine for laravel というのがあったので、こちらを使う。
composer require ytake/laravel-smarty
Smartyは自動的には入らないので、適当なバージョンを入れる。
composer require smarty/smarty
Smarty 4.5が入った。
設定
bootstrap/providers.php に必要な設定を行う。
<?php
return [
App\Providers\AppServiceProvider::class,
// add smarty extension
Ytake\LaravelSmarty\SmartyServiceProvider::class,
// add artisan commands
Ytake\LaravelSmarty\SmartyConsoleServiceProvider::class,
];
公式のドキュメントではconfig/app.phpに追加すると書いてあるが、Laravel 11からService providerの登録方法が変わっているっぽいので注意する必要がある。
コントローラの作成
テスト用のコントローラを作る。
php artisan make:controller 'App\Http\Controllers\IndexController'
作成されたapp/Http/Controllers/IndexController.phpを以下のように編集する。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class IndexController extends Controller { public function welcomeSmarty() { $timeStr = date('Y/m/d H:i:s'); return view('welcome-smarty', ['time_str' => $timeStr]); } }
ルートの設定
routes/web.phpに以下を追記する。
Route::get('/welcome-smarty', [\App\Http\Controllers\IndexController::class, 'welcomeSmarty']);
ビューファイルの作成
resources/views/welcome-smarty.tplファイルを準備する。
Welcome smarty
<br />
PHP version: {$smarty.const.PHP_VERSION}
<br />
Time: {$time_str|escape:"html"}
確認
http://<your-ip-address>/laravel-setup-1-smarty/public/welcome-smarty
にアクセスして、"Welcome smarty ..."が表示されればOK。