HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

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。

まとめ

  • LaravelでSmartyは使える。
  • LaravelとSmartyエンジンをつなぐアダプターがあったが、導入時に少しハマった。