Laravel の隠された宝物を発見する
Laravel を使用している多くの開発者は、フレームワークが提供する機能の表面をなぞっただけかもしれません。このドキュメントでは、最も一般的な使用例と明らかな機能がカバーされていますが、すべてをカバーしているわけではありません。
誤解しないでください。ドキュメントは素晴らしいものです。ただ、実行できることが非常に多く、すべてをドキュメント化するのは困難です。そこで、Laravel に潜む隠された宝石のいくつかを見ていきます。
カスケードビュー利用可能時期: v4.0.0
記録:いいえ
ビューは構成ファイルのようにカスケードできます。カスケード ビューは、スケーラブルなテーマ システムを開発する場合に非常に役立ちます。次のディレクトリ構造を考えてみましょう。リーリー
これは、return View::make('theme::blog.index'); を実行すると、最初に
themes/default/views ディレクトリに格納されるという考え方です。ビューが見つからない場合は、
app/views にフォールバックします。
View::addNamespace を使用して、両方の場所に独自の名前空間を登録します。
リーリー
###集める###
利用可能時期:
v4.0.0レコード:
パートコレクションは、配列を操作および管理するための優れた方法です。コレクションにはさまざまな便利なメソッドがあり、ArrayableInterface
、IteratorAggregate、
JsonableInterface などの多くの便利なインターフェイスが実装されています。
ストレージにフラット ファイルを使用する小さなブログ エンジンを構築しているとします。並べ替え、フィルタリング、ページングなどの操作を実行できるようにしたいと考えています。
$articles
があり、配列の各メンバーがArticle クラスのインスタンスであると仮定します。次に、
Collection の新しいインスタンスを取得し、それに記事の配列を与えるだけです。
リーリー
###選別###
コレクションを使用して記事を並べ替えることができます。記事を並べ替えて、最近更新された記事を最初に表示してみましょう。この記事では、ファイル システムから記事を読み込むときに、
updatedAt
リーリー
sortBy メソッドと
sortByDesc
###フィルター###
ソートと同様に、MySQL の
WHERE 句と同様に、コレクションを使用して記事をフィルタリングすることもできます。実行された可能性のある検索に基づいて記事をフィルタリングしましょう。
リーリー
filter
メソッドは実際にはIlluminate\Support\Collection の新しいインスタンスを返すため、それを
$results
###ページング###
このコレクションを使用すると、1 ページに記事が多すぎないように記事をページ分割できます。
リーリー
slice
メソッドを使用して、コレクション内の記事の一部を抽出し、それを
$results
この例は、Laravel の
Paginator
クラスの新しいインスタンスを作成することでさらに実装できます。このようにして、すべてのページ番号とリンクを生成できます。
他にもあります!
ランダムな記事を取得できます:
リーリー
IteratorAggregate インターフェイスと
ArrayIterator
リーリー
記事を通常の配列またはその JSON 表現に変換することもできます。リーリー
最も優れたメソッドの 1 つは、おそらくgroupBy です。これを使用すると、特定のキーで記事をグループ化できます。各記事の上部にメタデータがあり、それが解析されて記事本文から削除されると想像してください。
このメタデータの解析はこの記事の範囲を超えていますが、メタデータは解析され、
Article
groupBy
を使用して、記事が公開されたカテゴリごとに記事をグループ化できます。
リーリー
同じカテゴリを共有するすべての記事がグループ化されます。その後、特定のカテゴリの記事を取得できます。
リーリー
正規表現フィルター
利用可能時期:
記録:
いいえ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
,值为 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

php8.1の列挙関数は、指定された定数を定義することにより、コードの明確さとタイプの安全性を高めます。 1)列挙は、整数、文字列、またはオブジェクトであり、コードの読みやすさとタイプの安全性を向上させることができます。 2)列挙はクラスに基づいており、トラバーサルや反射などのオブジェクト指向の機能をサポートします。 3)列挙を比較と割り当てに使用して、タイプの安全性を確保できます。 4)列挙は、複雑なロジックを実装するためのメソッドの追加をサポートします。 5)厳密なタイプのチェックとエラー処理は、一般的なエラーを回避できます。 6)列挙は魔法の価値を低下させ、保守性を向上させますが、パフォーマンスの最適化に注意してください。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

Restapiの設計原則には、リソース定義、URI設計、HTTPメソッドの使用、ステータスコードの使用、バージョンコントロール、およびHATEOASが含まれます。 1。リソースは名詞で表され、階層で維持される必要があります。 2。HTTPメソッドは、GETを使用してリソースを取得するなど、セマンティクスに準拠する必要があります。 3.ステータスコードは、404など、リソースが存在しないことを意味します。 4。バージョン制御は、URIまたはヘッダーを介して実装できます。 5。それに応じてリンクを介してhateoasブーツクライアント操作をブーツします。

PHPでは、Try、Catch、最後にキーワードをスローすることにより、例外処理が達成されます。 1)TRYブロックは、例外をスローする可能性のあるコードを囲みます。 2)キャッチブロックは例外を処理します。 3)最後にブロックは、コードが常に実行されることを保証します。 4)スローは、例外を手動でスローするために使用されます。これらのメカニズムは、コードの堅牢性と保守性を向上させるのに役立ちます。

PHPの匿名クラスの主な機能は、1回限りのオブジェクトを作成することです。 1.匿名クラスでは、名前のないクラスをコードで直接定義することができます。これは、一時的な要件に適しています。 2。クラスを継承したり、インターフェイスを実装して柔軟性を高めることができます。 3.使用時にパフォーマンスとコードの読みやすさに注意し、同じ匿名のクラスを繰り返し定義しないようにします。
