Laravel を使用している多くの開発者は、フレームワークが提供する機能の表面をなぞっただけかもしれません。このドキュメントでは、最も一般的な使用例と明らかな機能がカバーされていますが、すべてをカバーしているわけではありません。
誤解しないでください。ドキュメントは素晴らしいものです。ただ、実行できることが非常に多く、すべてをドキュメント化するのは困難です。そこで、Laravel に潜む隠された宝石のいくつかを見ていきます。
カスケードビュー利用可能時期: v4.0.0
記録:いいえ
ビューは構成ファイルのようにカスケードできます。カスケード ビューは、スケーラブルなテーマ システムを開発する場合に非常に役立ちます。次のディレクトリ構造を考えてみましょう。リーリー
これは、return View::make('theme::blog.index'); を実行すると、最初に
themes/default/views ディレクトリに格納されるという考え方です。ビューが見つからない場合は、
app/views にフォールバックします。
View::addNamespace を使用して、両方の場所に独自の名前空間を登録します。
リーリー
###集める###
レコード:
パートコレクションは、配列を操作および管理するための優れた方法です。コレクションにはさまざまな便利なメソッドがあり、ArrayableInterface
、IteratorAggregate、
JsonableInterface などの多くの便利なインターフェイスが実装されています。
ストレージにフラット ファイルを使用する小さなブログ エンジンを構築しているとします。並べ替え、フィルタリング、ページングなどの操作を実行できるようにしたいと考えています。
$articles
があり、配列の各メンバーがArticle クラスのインスタンスであると仮定します。次に、
Collection の新しいインスタンスを取得し、それに記事の配列を与えるだけです。
リーリー
###選別###
コレクションを使用して記事を並べ替えることができます。記事を並べ替えて、最近更新された記事を最初に表示してみましょう。この記事では、ファイル システムから記事を読み込むときに、
updatedAt
sortBy メソッドと
sortByDesc
###フィルター###
ソートと同様に、MySQL の
WHERE 句と同様に、コレクションを使用して記事をフィルタリングすることもできます。実行された可能性のある検索に基づいて記事をフィルタリングしましょう。
リーリー
Illuminate\Support\Collection の新しいインスタンスを返すため、それを
$results
###ページング###
このコレクションを使用すると、1 ページに記事が多すぎないように記事をページ分割できます。
リーリー
slice
メソッドを使用して、コレクション内の記事の一部を抽出し、それを
$results
Paginator
クラスの新しいインスタンスを作成することでさらに実装できます。このようにして、すべてのページ番号とリンクを生成できます。
他にもあります!
ランダムな記事を取得できます:
リーリー
IteratorAggregate インターフェイスと
ArrayIterator
リーリー
最も優れたメソッドの 1 つは、おそらくgroupBy です。これを使用すると、特定のキーで記事をグループ化できます。各記事の上部にメタデータがあり、それが解析されて記事本文から削除されると想像してください。
このメタデータの解析はこの記事の範囲を超えていますが、メタデータは解析され、
Article
groupBy
を使用して、記事が公開されたカテゴリごとに記事をグループ化できます。
リーリー
同じカテゴリを共有するすべての記事がグループ化されます。その後、特定のカテゴリの記事を取得できます。
リーリー
正規表現フィルター
利用可能時期:
記録:
いいえ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
,值为 Jason
、country
,值为 Australia
和 subscriber
,值为布尔值 true
。
在 Laravel 4.1 之前,您只能从实例中真正设置和获取属性。从 Laravel 4.1 开始,您可以使用 toArray
和 toJson
方法分别获取属性数组及其 JSON 表示形式。
从 Laravel 4.2 开始,该类还实现了 JsonSerialized
接口,这意味着您可以将实例直接传递到 json_encode
中。
我们已经研究了 Laravel 框架的几个有用的精华。但是,正如您所猜测的,框架内还有更多内容。
了解 Laravel 可能提供的其他功能的最佳方法是深入研究源代码。它并不像您想象的那么可怕,您将学到很多关于您正在构建的框架的知识。
如果您发现了其他宝石,请随时在评论中分享!
以上がLaravel の隠された宝物を発見するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。