Laravel の隠された宝物を発見する

WBOY
リリース: 2023-08-28 16:46:01
オリジナル
701 人が閲覧しました

揭开 Laravel 隐藏的宝藏

Laravel を使用している多くの開発者は、フレームワークが提供する機能の表面をなぞっただけかもしれません。このドキュメントでは、最も一般的な使用例と明らかな機能がカバーされていますが、すべてをカバーしているわけではありません。

誤解しないでください。ドキュメントは素晴らしいものです。ただ、実行できることが非常に多く、すべてをドキュメント化するのは困難です。そこで、Laravel に潜む隠された宝石のいくつかを見ていきます。

カスケードビュー

利用可能時期: v4.0.0

記録:いいえ

ビューは構成ファイルのようにカスケードできます。カスケード ビューは、スケーラブルなテーマ システムを開発する場合に非常に役立ちます。次のディレクトリ構造を考えてみましょう。

リーリー

これは、

return View::make('theme::blog.index'); を実行すると、最初に themes/default/views ディレクトリに格納されるという考え方です。ビューが見つからない場合は、app/views にフォールバックします。

これを行うには、

View::addNamespace を使用して、両方の場所に独自の名前空間を登録します。 リーリー ###集める###

利用可能時期:

v4.0.0

レコード:

パート

コレクションは、配列を操作および管理するための優れた方法です。コレクションにはさまざまな便利なメソッドがあり、ArrayableInterface

IteratorAggregateJsonableInterface などの多くの便利なインターフェイスが実装されています。 ストレージにフラット ファイルを使用する小さなブログ エンジンを構築しているとします。並べ替え、フィルタリング、ページングなどの操作を実行できるようにしたいと考えています。

ブログ エンジンの実装はこの記事の範囲を超えていますが、配列

$articles

があり、配列の各メンバーが

Article クラスのインスタンスであると仮定します。次に、Collection の新しいインスタンスを取得し、それに記事の配列を与えるだけです。 リーリー ###選別### コレクションを使用して記事を並べ替えることができます。記事を並べ替えて、最近更新された記事を最初に表示してみましょう。この記事では、ファイル システムから記事を読み込むときに、updatedAt

属性をファイルの最終変更時刻に設定すると仮定します。

リーリー

sortBy メソッドと sortByDesc

メソッドは、コレクションの並べ替えに使用できる値を返すコールバックを受け取ります。私たちの場合、単に記事の最終更新時刻を返すだけで、その時刻に基づいてコレクションを並べ替えることができます。

###フィルター### ソートと同様に、MySQL の WHERE 句と同様に、コレクションを使用して記事をフィルタリングすることもできます。実行された可能性のある検索に基づいて記事をフィルタリングしましょう。 リーリー

filter

メソッドは実際には

Illuminate\Support\Collection の新しいインスタンスを返すため、それを $results

変数に割り当てる必要があります。この新しいコレクションには、「Laravel ロック!」について言及する記事のみが含まれます。

###ページング### このコレクションを使用すると、1 ページに記事が多すぎないように記事をページ分割できます。 リーリー slice メソッドを使用して、コレクション内の記事の一部を抽出し、それを $results

変数に割り当てます。

この例は、Laravel の

Paginator

クラスの新しいインスタンスを作成することでさらに実装できます。このようにして、すべてのページ番号とリンクを生成できます。

他にもあります! ランダムな記事を取得できます: リーリー

記事のコレクションを通常の配列であるかのように反復処理することもできます。これはすべて、

IteratorAggregate インターフェイスと ArrayIterator

インターフェイスのおかげです。

リーリー

記事を通常の配列またはその JSON 表現に変換することもできます。

リーリー

最も優れたメソッドの 1 つは、おそらく

groupBy です。これを使用すると、特定のキーで記事をグループ化できます。各記事の上部にメタデータがあり、それが解析されて記事本文から削除されると想像してください。 このメタデータの解析はこの記事の範囲を超えていますが、メタデータは解析され、Article

インスタンスのプロパティであると想定します。その後、

groupBy

を使用して、記事が公開されたカテゴリごとに記事をグループ化できます。

リーリー 同じカテゴリを共有するすべての記事がグループ化されます。その後、特定のカテゴリの記事を取得できます。 リーリー

コレクションは、Laravel が提供する最高の隠れた宝石の 1 つです。

正規表現フィルター 利用可能時期:

v4.1.19

記録:

いいえ

Laravel でのルートのフィルタリングは、私たちの多くがすべてのプロジェクトで実行する一般的なタスクです。フィルターを使用すると、ルートがトリガーされる前または後に、ユーザー認証やレート制限などのタスクを実行できます。

Route::filter を使用してフィルタを作成し、個々のルートやルート グループに適用したり、Route::when

を使用して一致するパターンに適用したりできます。

Route::filter('restricted', function($route, $request, $group)
{
    // Restrict user access based on the value of $group
});

Route::when('admin/*', 'restricted:admin');
ログイン後にコピー

在此示例中,我们创建一个 restricted 过滤器,它需要一个参数 $group$route$request 参数始终提供给 before 过滤器。

但是如果我们想要更大的灵活性怎么办?假设我们想要将过滤器应用于所有 admin 路由除了 admin/login。我们可以使用路线组并将相关路线移至组外。或者我们可以使用 Route::whenRegex 并编写我们自己的正则表达式。

Route::whenRegex('/^admin(\/(?!login)\S+)?$/', 'restricted:admin');
ログイン後にコピー

此正则表达式只是确保它仅适用于以 admin 开头且后面不跟 /login 的路由,但后面可以跟任何其他内容。出色的。现在,我们将 restricted:admin 过滤器应用于除 admin/login 路由之外的所有路由。

消息包

可用时间: v4.0.0

记录:部分

毫无疑问,您已经使用 Illuminate\Support\MessageBag 一段时间了,甚至没有意识到。 MessageBag 扮演的最大角色是在使用 Laravel 内置验证器时包含所有验证错误。

每个视图中都有一个 $errors 变量,该变量包含空的 MessageBag 实例或使用 Redirect::to('/')->withErrors($validator); 刷新到会话的实例

当在特定输入下方显示错误消息时,很多人可能会在表单中执行类似的操作。

{{ Form::text('username', null) }}
@if($errors->has('username'))
    <div class="error">{{ $errors->first('username') }}></div>;
@endif
ログイン後にコピー

您实际上可以完全删除 if 语句,并使用 first 方法的第二个参数将消息包装在 div 中。

    {{ Form::text('username', null) }}
    {{ $errors->first('username', '<div class="error">:message</div>') }}
ログイン後にコピー

好多了,好多了!

流利

可用时间: v3.0.0

记录:部分

Fluent 类已经存在很长时间了,当使用模式生成器创建迁移时,它实际上在框架本身内使用。 Laravel 3 和 Laravel 4 之间,类本身几乎没有变化,唯一大的区别是多了一些接口。

要使用 Fluent 类,您所需要做的就是获取一个实例,然后就可以了。

$user = new Illuminate\Support\Fluent;
$user->name('Jason')->country('Australia')->subscriber();
ログイン後にコピー

该实例现在定义了 3 个属性:name,值为 Jasoncountry,值为 Australiasubscriber,值为布尔值 true

在 Laravel 4.1 之前,您只能从实例中真正设置和获取属性。从 Laravel 4.1 开始,您可以使用 toArraytoJson 方法分别获取属性数组及其 JSON 表示形式。

从 Laravel 4.2 开始,该类还实现了 JsonSerialized 接口,这意味着您可以将实例直接传递到 json_encode 中。

还有更多!

我们已经研究了 Laravel 框架的几个有用的精华。但是,正如您所猜测的,框架内还有更多内容。

了解 Laravel 可能提供的其他功能的最佳方法是深入研究源代码。它并不像您想象的那么可怕,您将学到很多关于您正在构建的框架的知识。

如果您发现了其他宝石,请随时在评论中分享!

以上がLaravel の隠された宝物を発見するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート