以下の内容はhttps://hhelibex.hatenablog.jp/entry/2025/09/23/115816より取得しました。


Zend FrameworkからLaravelに移行する話(3)

はじめに

お仕事で、Zend Frameworkのバージョンアップをしなければならなくなった・・と思ったら、Zend Frameworkはもうなくて、Laminas Projectに移って新たなフレームワークとして公開されている。 しかし、Laminas MVCでは必要な要件を満たさないことが分かってとん挫していた。

そこで、次の候補としてLaravelを挙げて、必要な要件を満たせるかどうかを一歩ずつ調査していく。

要件(3)

3つ目の要件は、「forwardとredirectができること」。

これはまぁ、機能としてはあるんだろうから、要件というよりやり方の調査という側面が大きいけど。

導入

こちらでセットアップした環境を(コピーして)使っていく。

hhelibex.hatenablog.jp

私は以下のようにコピーを作成。

cp -pr laravel-setup-2-separated-views laravel-setup-3-forward-redirect
cd laravel-setup-3-forward-redirect

設定・実装

app/Http/Controllers/IndexController.phpを以下のように編集する(redirectメソッドとforwardメソッドを追加)。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

class IndexController extends Controller
{
    public function index()
    {
        $timeStr = date('Y/m/d H:i:s');
        $isFirefox = preg_match('/Firefox/', $_SERVER['HTTP_USER_AGENT']);
        $values = [
                    'time_str' => $timeStr,
                    'user_agent' => $_SERVER['HTTP_USER_AGENT'],
                    'is_firefox' => $isFirefox,
                ];
        if ($isFirefox) {
            return view(
                'firefox.index',
                $values
            );
        } else {
            return view(
                'default.index',
                $values
            );
        }
    }
    public function welcomeSmarty()
    {
        $timeStr = date('Y/m/d H:i:s');
        return view('welcome-smarty', ['time_str' => $timeStr]);
    }
    public function redirect()
    {
        $isFirefox = preg_match('/Firefox/', $_SERVER['HTTP_USER_AGENT']);
        if ($isFirefox) {
            return redirect('/redirected/firefox');
        } else {
            return redirect('/redirected/others');
        }
    }
    public function forward()
    {
        $isFirefox = preg_match('/Firefox/', $_SERVER['HTTP_USER_AGENT']);
        if ($isFirefox) {
            $request = Request::create('/forwarded/firefox', 'GET');
            return Route::dispatch($request);
        } else {
            $request = Request::create('/forwarded/others', 'GET');
            return Route::dispatch($request);
        }
    }
}

以下のコマンドを実行して、2つのコントローラーのひな型を作る。

php artisan make:controller '\App\Http\Controllers\RedirectedController'
php artisan make:controller '\App\Http\Controllers\ForwardedController'

それぞれ編集する。

  • app/Http/Controllers/RedirectedController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class RedirectedController extends Controller
{
    public function firefox()
    {
        return view('redirected.firefox');
    }
    public function others()
    {
        return view('redirected.others');
    }
}
  • app/Http/Controllers/ForwardedController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ForwardedController extends Controller
{
    public function firefox()
    {
        return view('forwarded.firefox');
    }
    public function others()
    {
        return view('forwarded.others');
    }
}

以下の4つのビューファイルを用意する。

  • resources/views/redirected/firefox.tpl
Redirected Firefox view
  • resources/views/redirected/others.tpl
Redirected Others view
  • resources/views/forwarded/firefox.tpl
Forwarded Firefox view
  • resources/views/forwarded/others.tpl
Forwarded Others view

最後に、routes/web.phpに以下を追記する。

Route::get('/redirect', [\App\Http\Controllers\IndexController::class, 'redirect']);
Route::get('/forward', [\App\Http\Controllers\IndexController::class, 'forward']);
Route::get('/redirected/firefox', [\App\Http\Controllers\RedirectedController::class, 'firefox']);
Route::get('/redirected/others', [\App\Http\Controllers\RedirectedController::class, 'others']);
Route::get('/forwarded/firefox', [\App\Http\Controllers\ForwardedController::class, 'firefox']);
Route::get('/forwarded/others', [\App\Http\Controllers\ForwardedController::class, 'others']);

実行

Firefoxhttp://<your-ip-address>/laravel-setup-3-forward-redirect/public/redirectにアクセスする。

URLがhttp://<your-ip-address>/laravel-setup-3-forward-redirect/public/redirected/firefoxに変わって以下の画面が出ればOK。

Redirected Firefox view

Firefoxhttp://<your-ip-address>/laravel-setup-3-forward-redirect/public/forwardにアクセスする。

URLはそのままで、以下の画面が出ればOK。

Forwarded Firefox view

Google Chromehttp://<your-ip-address>/laravel-setup-3-forward-redirect/public/redirectにアクセスする。

URLがhttp://<your-ip-address>/laravel-setup-3-forward-redirect/public/redirected/othersに変わって以下の画面が出ればOK。

Redirected Others view

Google Chromehttp://<your-ip-address>/laravel-setup-3-forward-redirect/public/forwardにアクセスする。

URLはそのままで、以下の画面が出ればOK。

Forwarded Others view

まとめ

  • redirectは問題なくできることを確認
  • forwardは、Request::create()Route::dispatch()を使うやり方が『この方法は、Laravel 4.xや5.xの時代から存在しており、現在でも利用できますが、Laravelの内部実装に依存します。』とのことなので、forwardを使用しない方向で再設計するのがよいのかも



以上の内容はhttps://hhelibex.hatenablog.jp/entry/2025/09/23/115816より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14