Laravelで簡単URL設定/時間制限URL作り方も紹介

Laravelでは下記のようにurlヘルパを使うことで簡単にurlを作成することができます。

$post = App\Apple::find(1);
echo url(“/computers/{$apple->id}");
// http://example.com/computers/1を生成

現在のurlにアクセスするためには

urlにパスを引数として指定しない場合は、下記のようにすることで現在のurlにアクセスすることができます。

// クエリ文字列を除いた現在のURL
echo url()->current();
// クエリ文字列を含んだ現在のURL
echo url()->full();
// 直前のリクエストの完全なURL
echo url()->previous();

URLファサードを使っても同じことができます。

use Illuminate\Support\Facades\URL;
echo URL::current();::

ファサードの構造や何かを知りたい方はこちらから確認してください。

名前つきルートのurlの生成

ルートの記事で名前つきルートについて説明しましたが、再度ここでも説明いたします。

Urlとは下記のようなものであり、Laravelでurlを作成するときは、com以降の/からの部分を自身で指定していくのが一般的になります。

https://storehouse-techhack.com/

ですが、名前つきルートを行うことで、自身で指定した名前でショートカットを生成することができます。 下記を見てみましょう。

Route:get(‘/computer/{apple_id_’, function () {
    //
})->name(‘computer.show');

->nameで‘computer.show’を指定することで、下記urlに対して

https://storehouse-techhack.com/computer/appleid
こうすることでルーティングをすることができます。

route(‘computer.show’,‘id’=>1) 

署名つきURLの使い方

上記のを応用したテクニックとして、署名つきURLがあります。

署名つきURLというのは何かと言うと、

メールマガジンなど何か退会する際にながーいurlがメールに送られてくる場面を思い出してください。

この実装がLaravelでは簡単に作ることができます。

use Illuminate\Support\Facades\URL;
return URL::signedRoute(‘resign’, [’apple-user' => 1]);

実際に実装を行なってみましょう。まずはミドルウェアの設定をしてください。

ミドルウェアが何かわからない人はこちらから。

protected $routeMiddleware = [
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
];

下記のようにしても署名が正しいかどうかの判定を行うことができます。お好きな方をどうぞ!

function (Request $request) {
    if (! $request->hasValidSignature()) {
        abort(401);
    }

あとは、先ほどの ファサードでurlを生成して、viewを作成するだけです。

実験ですので,homeページにurlを出してみましょう。

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

Route::get('/', function () {
    // URL生成
    $url = URL::signedRoute(‘resign’, [’macuser' => 1]);
    return route(‘home’);
});

Route::get('/unsubscribe/{macuser}', function (Request $request) {
    return view(‘apple’);
})->name(‘resign’)->middleware('signed');

上記のようにするだけで、簡単に署名つきurlを作成することができます。

署名つきURL時間制限URL

時間制限つきの署名つきurlも簡単に生成ができます

高速バスに乗った時のメールがありまたので転載しておきます。

このようなイメージです。

実装は下記のようになっています。

use Illuminate\Support\Facades\URL;
return URL::temporarySignedRoute(
    'unsubscribe', now()->addHours(24), ['user' => 1]
);

時間制限のurlも簡単にできますね!Laravelって便利ですね。

コメントを残す