Lang x Lang

Laravel Folio

Table of Contents

Introduction

Laravel Folio は、 Laravel アプリケーションでの routing を簡素化するために設計された強力なページベースのルーターです。 Laravel Folio を使えば、アプリケーションのresources/views/pagesディレクトリ内で Blade テンプレートを作成するのと同じくらい簡単に route を生成できます。

例えば、/greeting URL でアクセス可能なページを作成するには、アプリケーションのresources/views/pages ディレクトリにgreeting.blade.php ファイルを作成するだけです:

<div>
    Hello World
</div>

Installation

始めるには、 Composer パッケージマネージャーを使用して、Folio をあなたの project にインストールしてください:

composer require laravel/folio

Folio をインストールした後、folio:install Artisan command を実行することができます。これにより、Folio の service provider があなたの application にインストールされます。この service provider は、Folio が routes / pages を search するディレクトリを登録します。

php artisan folio:install

ページパス / URIs

default では、Folio はあなたの application の resources/views/pages ディレクトリからページを提供しますが、Folio の service プロバイダの boot method で、これらのディレクトリをカスタマイズすることができます。

例えば、時には同じ Laravel application で複数の Folio パスを指定すると便利なことがあります。あなたのアプリケーションの "admin" エリアには別の Folio ページのディレクトリを使用したい場合や、アプリケーションの残りのページには別のディレクトリを使用したい場合などです。

この作業は、Folio::pathおよびFolio::uriメソッドを使用して達成することができます。path method は、routing HTTP requests の際に Folio がページをスキャンするディレクトリを登録し、uri method はそのページディレクトリのベース URI を指定します:

use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages/guest'))->uri('/');

Folio::path(resource_path('views/pages/admin'))
    ->uri('/admin')
    ->middleware([
        '*' => [
            'auth',
            'verified',

            // ...
        ],
    ]);

サブドメイン Routing

あなたはまた、受信リクエストのサブドメインに基づいてページに route することもできます。例えば、admin.example.comからのリクエストを、あなたの Folio の他のページとは異なるページディレクトリに route したい場合があるかもしれません。これは、Folio::path method を呼び出した後に、domain method を呼び出すことで実現できます。

use Laravel\Folio\Folio;

Folio::domain('admin.example.com')
    ->path(resource_path('views/pages/admin'));

domain method は、 domain やサブドメインの部分をパラメータとして取得することも可能です。これらのパラメータはページテンプレートに注入されます:

use Laravel\Folio\Folio;

Folio::domain('{account}.example.com')
    ->path(resource_path('views/pages/admin'));

Creating Routes

あなたは、Folio マウントディレクトリのいずれかに Blade テンプレートを配置することにより、Folio の route を作成することができます。 default として、Folio は resources/views/pagesディレクトリをマウントしますが、Folio の service プロバイダの boot method でこれらのディレクトリをカスタマイズすることもできます。

Blade テンプレートが Folio にマウントされたディレクトリに配置されると、すぐにブラウザからアクセスすることができます。例えば、pages/schedule.blade.phpに配置されたページは、ブラウザでhttp://example.com/scheduleにアクセスすることで閲覧することができます。

すべての Folio ページ/ routes のリストをすばやく view するには、folio:list の Artisan command を呼び出すことができます:

php artisan folio:list

ネストされた Routes

Folio のディレクトリの中に 1 つ以上のディレクトリを作成することで、ネストされた route を作成することができます。たとえば、/user/profile経由でアクセス可能なページを作成するには、pages/userディレクトリ内にprofile.blade.phpテンプレートを作成します。

php artisan folio:page user/profile

# pages/user/profile.blade.php → /user/profile

インデックス Routes

時々、特定のページをディレクトリの"インデックス"にしたい場合があります。Folio ディレクトリ内にindex.blade.phpテンプレートを配置することで、そのディレクトリの root へのリクエストはそのページにルーティングされます。

php artisan folio:page index
# pages/index.blade.php → /

php artisan folio:page users/index
# pages/users/index.blade.php → /users

Route Parameters

よく、受信リクエストの URL のセグメントをページに挿入して、それらと対話できるようにする必要があります。例えば、表示されている user の"ID"にアクセスする必要があるかもしれません。これを達成するために、ページのファイル名のセグメントを角括弧で囲むことができます:

php artisan folio:page "users/[id]"

# pages/users/[id].blade.php → /users/1

キャプチャしたセグメントは、 Blade テンプレート内の変数としてアクセスできます:

<div>User {{ $id }}</div>

複数のセグメントをキャプチャするためには、カプセル化されたセグメントの前に三つのドット...を付け加えることができます:

php artisan folio:page "users/[...ids]"

# pages/users/[...ids].blade.php → /users/1/2/3

複数のセグメントをキャプチャすると、キャプチャしたセグメントは array としてページに挿入されます:

<ul>
  @foreach ($ids as $id)
  <li>User {{ $id }}</li>
  @endforeach
</ul>

Route Model Binding

あなたのページテンプレートのファイル名のワイルドカードセグメントがあなたのアプリケーションの Eloquent models のいずれかに対応している場合、Folio は自動的に Laravel の route model binding 機能を活用し、解決された model インスタンスをあなたのページに attempt で注入します:

php artisan folio:page "users/[User]"

# pages/users/[User].blade.php → /users/1

キャプチャした models は、 Blade テンプレート内の変数としてアクセスすることができます。モデルの変数名は"camel case"に変換されます。

<div>User {{ $user->id }}</div>

キーのカスタマイズ

時には、id以外の column を使用してバウンドされた Eloquent models を解決したい場合があるかもしれません。そのような場合、ページのファイル名で column を指定することができます。たとえば、ファイル名が [Post:slug].blade.php のページは、idの column ではなく、slugの column を介してバウンドされた model の解決を attempt 。

Windows では、-を使用して model の名前とキーを分ける必要があります:[Post-slug].blade.php

Model の場所

default として、Folio はあなたの application のapp/Modelsディレクトリ内であなたの model を検索します。しかし、必要であれば、テンプレートのファイル名で完全修飾 model class 名を指定することができます。

php artisan folio:page "users/[.App.Models.User]"

# pages/users/[.App.Models.User].blade.php → /users/1

ソフト削除された Models

default では、ソフト削除された models は、暗黙の models バインディングを解決するときには取得されません。ただし、必要に応じて、ページのテンプレート内でwithTrashed関数を呼び出すことで、Folio にソフト削除された models を取得するよう指示することができます。

<?php

use function Laravel\Folio\{withTrashed};

withTrashed();

?>

<div>
    User {{ $user->id }}
</div>

Render Hooks

default では、Folio はページの Blade テンプレートの content を、着信する request への response として返します。しかし、ページのテンプレート内でrender関数を呼び出すことで、 response をカスタマイズすることもできます。

render 関数はクロージャを受け入れます。これは Folio によって描画されるViewインスタンスを受け取り、追加の data を view に追加したり、全体の response をカスタマイズしたりすることができます。 Viewインスタンスを受け取るだけでなく、 追加の route パラメータや model バインディングもrender クロージャに提供されます:

<?php

use App\Models\Post;
use Illuminate\Support\Facades\Auth;
use Illuminate\View\View;

use function Laravel\Folio\render;

render(function (View $view, Post $post) {
    if (! Auth::user()->can('view', $post)) {
        return response('Unauthorized', 403);
    }

    return $view->with('photos', $post->author->photos);
}); ?>

<div>
    {{ $post->content }}
</div>

<div>
    This author has also taken {{ count($photos) }} photos.
</div>

Named Routes

指定したページの route に名前を付けるために、name関数を使用することができます:

<?php

use function Laravel\Folio\name;

name('users.index');

Laravel の名前付き routes のように、route関数を使用して名前が付けられた Folio ページへの URL を生成することができます。

<a href="{{ route('users.index') }}">
    All Users
</a>

ページにパラメータがある場合、その values を route 関数に簡単に渡すことができます:

route('users.show', ['user' => $user]);

Middleware

middleware関数をページのテンプレート内で呼び出すことにより、特定のページに対して middleware を適用することができます。

<?php

use function Laravel\Folio\{middleware};

middleware(['auth', 'verified']);

?>

<div>
    Dashboard
</div>

または、一連のページに middleware を割り当てるためには、Folio::pathの method を呼び出した後で、middlewareの method を連鎖的に使用することができます。

middleware を適用すべきページを指定するために、 middleware の array はそれらが適用されるべきページの対応する URL パターンを使用してキー化することができます。 * 文字はワイルドカード文字として利用することができます:

use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages'))->middleware([
    'admin/*' => [
        'auth',
        'verified',

        // ...
    ],
]);

あなたは、インラインで匿名の middleware を定義するために、array の中にクロージャを含めることができます。

use Closure;
use Illuminate\Http\Request;
use Laravel\Folio\Folio;

Folio::path(resource_path('views/pages'))->middleware([
    'admin/*' => [
        'auth',
        'verified',

        function (Request $request, Closure $next) {
            // ...

            return $next($request);
        },
    ],
]);

Route Caching

Folio を使用するときは常に、Laravel の route caching 能力を活用するべきです。Folio は route:cacheの Artisan command に対してリッスンし、Folio ページの定義と route の名前が最大性能を発揮するために適切にキャッシュされることを確認します。

当社サイトでは、Cookie を使用しています。各規約をご確認の上ご利用ください:
Cookie Policy, Privacy Policy および Terms of Use