ホームページ >バックエンド開発 >PHPチュートリアル >LaravelでRESTリソースを構築します
キーテイクアウト
を使用して複数形を自分で指定しない場合
emberjsは仮定し、「式」を要求します。フレームワーク自体がそのようなことを提供するのは良いことですが、一方で、これらの詳細を忘れた場合、物事は制御不能になります。
エンバーでより深く冒険する前に、警告:エンバーは困難で強力です。時間をかけてそれがどのように機能するかを学びましょう{ "user": { "firstName": "firstName", "lastName": "lastName" } }少し物事を複雑にし、オブジェクト間に何らかの関係を置くと、たとえば、ユーザーが写真を持っていると言います。どのようにそれを出力しますか?
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }これは1対多くの関係です。ユーザーをリクエストすると、彼の写真も引っ張られます。 Laravelですでにいくつかの関係を設定しています。必要に応じて使用して、Emberでそれらの関係を消費することもできます。
このフレームワークがどのようにデータを望んでいるかを確認するためにEmberから始めました。構造の構築方法を知っていれば簡単です。データベースからデータを検証と取得するのは簡単ですが、堅実な休憩インターフェイスとスマートなインターフェイスを構築することは難しい部分です。
何かを開発すると、モックアップが非常に役立ちます。あなたが第一人者であり、PhotoshopやGimpに対処するのが嫌いであっても、プロトタイプに適したツールがあります。私はBalsamiqを使用しましたが、私のフロントページのプロトタイプはこれでした:
それを構築し始めましょう。 Open /App/views/index.php。これは、シングルページアプリとして機能します。このシリーズの最初の部分でこのファイルを作成しました。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }これを説明させてください。 NAVタグはナビゲーションを担当します。クラスのタイトルエリアのULタグは、アプリケーションの最初のレベルにリンクするロゴとして使用されるテキストです。また、カテゴリのリストを備えたドロップダウンも追加しました。詳細を知りたい場合は、5つのドキュメントにアクセスしてください。ほとんどの場合、操作をコピー/貼り付けているだけなので、この部分について心配しないでください。 また、コンテンツ領域にFoundationのグリッドシステムを使用しました。これはすべての情報で満たされ、ナビゲート中に変更されます。すべての内部更新はEmberによって処理されます。ここでは3つのテンプレートのみを構築します。 1つはユーザー用、1つは1つの写真用、もう1つはランディングページ用です。
すべてのコードがスクリプトタグ内にあることに気付きましたか? Emberは、ハンドルバーをテンプレート言語として使用します。テキスト/Xハンドルバーのタイプは、特別なタイプのスクリプトです。 Emberとハンドルバーをしばらく使用している場合は、おそらくテンプレート名を使用しました。このテンプレートはすべてのアプリケーションのコンテナとして使用されるため、このテンプレートはそれらを指定しません。名前を指定しない場合、Emberはアプリケーションテンプレートとして使用します。
リソースコントローラー
この非常にシンプルなアプリを開発したとき、REST APIを開発するときにリソースコントローラーが役立つことがわかりました。それがRESTアーキテクチャのポイントです。すべてがリソースです。すべてのリソースには、http動詞を適用できます。すべての動詞が必要なわけではありませんこれは、Artisanを介してリソースコントローラーを作成する方法です。オプション-Exceptは、このコントローラーからこれら2つの方法を除外します。メソッドの作成と編集は必要ありません。作成メソッドは、そのリソースを作成するグラフィカルインターフェイスを扱います。 1ページのアプリを作成しているので、Emberの外にビューを作成するのは賢明ではありません。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
別のコントローラーは画像コントローラーです。すでにそれを持っているのに、なぜ画像コントローラー?画像を提供するにはエンドポイントが必要だからです。 Dropboxは画像を保持していますが、外部からアクセスすることはできません。フォルダを公開したい場合は、支払う必要があります。それが最初の理由です。 2番目の理由は、すべてのイメージを公開したくないということです。一言で言えば、このコントローラーはDropboxから画像をつかみ、クライアントに提供します。
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }
そして最後になりましたが、usercontroller:
ですEmber.Inflector.inflector.irregular('formula', 'formulae');
コントローラーができたので、それらのコントローラーを関連するルートにリンクする必要があります。 /app/routes.phpを更新しましょう。 まず、ルート::グループを使用してURLネームスペース内にそれらをグループ化します。
{ "user": { "id": 1, "name": "firstName", "lastname": "lastname, "photos": [1, 2, 3] }, "photos": [ { "id": 1, "title": "Lorem Ipsum" }, { "id": 2, "title": "Lorem Ipsum" } ] }ここでは、名前空間であるプレフィックスを指定しました。このグループ内にあるものはすべて、次のようにアクセスできます:
また、そのグループ内のフィルターを指定できます。たとえば、auth :: wonebasic( 'username')フィルターを追加するか、このグループに追加して追加できます。他の認証も使用できます。
<script type="text/x-handlebars"> <!-- The navigation top-bar --> <nav data-topbar> <ul > <li > <h1><a href="#">Photo Upload</a></h1> </li> </ul> <section > <!-- Left Nav Section --> <ul > <li > <a href="#">Categories</a> <ul > <li><a href="#">Category1</a></li> <li><a href="#">Category2</a></li> <li><a href="#">Category3</a></li> <li><a href="#">Category4</a></li> </ul> </li> </ul> </section> <div ></div> </nav><!-- END Navigation --> <!-- Content --> <div style="margin-top: 50px;"> <!-- The content will be here --> </div><!-- END Content --> </script>
そのグループ内に3つのコントローラーを追加します。 Photocontroller、usercontroller、およびcategorycontroller
そのグループの外にImagesControllerを追加します。このコントローラーには名前空間が必要だとは思いません。画像は画像であり、名前空間を与えることには意味がありません。
php artisan controller:make PhotoController --except=create,edit最終的には、 /app/routes.phpファイルは次のようになります:
php artisan controller:make CategoryController --only=show,indexEmberの要件により、リソース名が複数形であることに注意してください。 これらのコントローラーの充填
php artisan controller:make ImagesController --only=show今、私たちは何かを作り始めることができます。すべてのことを説明するのが非常に難しいので、私はここでの休憩についてすべてをカバーするつもりはありません。詳細を知るために、このシリーズを参照してください。写真コントローラーから始めましょう
インデックス()メソッドは、データベースから最新の写真を返す必要があります。ここでは、いくつかのページネーションを行うことができますが、私は物事が複雑になりすぎてほしくありません。コメントに十分な関心がある場合は、このアプリケーションを今後の記事で更新します。
これはデータベースから9枚の写真をつかみます。次に、すべての写真を撮って、後でJSON形式に変換されるフォーマットされた配列で表示します。
すべてがうまくいった場合、または例外が雄弁さによってスローされない場合、これは正しい出力を表示します。特定のステータスコードを表示する場合は、雄弁でスローできるすべての例外をキャッチし、適切なステータスコードを表示します。今すぐShow()メソッドを記入しましょう。繰り返しますが、特定のIDを使用して写真に関するすべての情報を取得したいと考えています。
php artisan controller:make UserController --only=show,index
独自のアプリを構築するときは、ユーザー入力に検証を追加することを忘れないでください。
usercontrollerのロジックはほぼ同じです。今回は、ユーザーモデルをリクエストします。
{ "user": { "firstName": "firstName", "lastName": "lastName" } }
すべてがほぼ同じで、モデルとフィールドのみが変更されます。出力JSON。 showメソッドは次のようになります:
{ "users": [ { "firstName": "firstPersonsName", "lastName": "lastname" }, { "firstName": "secondPersonName", "lastName": "lastName" } ] }この関数は、指定されたIDを持つユーザーを取得します
私たちが扱っている最後のコントローラーは、ImagesControllerです。ロジックは、ファイルシステムから画像をつかんでそれらを提供するのと同じくらい簡単です。ファイルを保存し、ローカルファイルシステムまたはサーバーファイルシステムで取得する場合は簡単です。残念ながら、ファイルをHerokuに保存することはできないため、Dropboxを使用して、このエンドポイントからそれらのファイルを提供します。
ドロップボックスクライアントとフライシステムアダプターをインポートします。私たちの環境がローカルの場合、ローカルアダプターを使用してフライシステムを使用します。環境が生産されている場合は、Dropboxアダプターを使用してください。フライシステムクラスをこのコントローラー内のプライベート変数に割り当てます。
showメソッドはそのファイルにサービスを提供し、Destroyメソッドはファイルシステムからそのファイルを削除します。このライブラリを使用することにより、私たちはアプリにレベルの抽象化を入れました。
Ember.Inflector.inflector.irregular('formula', 'formulae');Destroy()関数は非常に単純です。削除メソッドを使用して、削除するファイルの名前を渡すことにより、そのファイルを選択してください。ファイルが見つからない場合は、404を返します。
最終的には、ImageControllerは次のようになります:
{ "user": { "id": 1, "name": "firstName", "lastname": "lastname, "photos": [1, 2, 3] }, "photos": [ { "id": 1, "title": "Lorem Ipsum" }, { "id": 2, "title": "Lorem Ipsum" } ] }
提供した形式はHTMLです。わかりました、それは少し奇妙です。 HTMLではなく画像を提供したかったのです。ただし、ブラウザはファイル形式を探し、そのファイルの使用方法を認識しているため、それは問題ではありません。
<script type="text/x-handlebars"> <!-- The navigation top-bar --> <nav data-topbar> <ul > <li > <h1><a href="#">Photo Upload</a></h1> </li> </ul> <section > <!-- Left Nav Section --> <ul > <li > <a href="#">Categories</a> <ul > <li><a href="#">Category1</a></li> <li><a href="#">Category2</a></li> <li><a href="#">Category3</a></li> <li><a href="#">Category4</a></li> </ul> </li> </ul> </section> <div ></div> </nav><!-- END Navigation --> <!-- Content --> <div style="margin-top: 50px;"> <!-- The content will be here --> </div><!-- END Content --> </script>先に進み、CategoryControllerを作成してみてください。私はあなたのための運動としてそれを除外しました。
APIのテスト
php artisan controller:make PhotoController --except=create,edit
私は認めなければなりません、私はphpstormに恋をしています、そして、残りのAPIをテストするために、私はRESTクライアントと呼ばれるツールを使用します。これは、テストを簡素化するグラフィカルインターフェイスです。必要に応じて、端末からカールを使用することもできます。いくつかのテストを行いましょう:
そしてこれが返されたものです:
php artisan controller:make CategoryController --only=show,indexphpstormのレストクライアントを使用すると、JSONで同じ結果が得られます。
削除や投稿など、他の動詞をテストすることもできます。先に進んで、できる限りテストしてください。テストに使用できる他のクライアントがあります。レストコンソールと郵便配達員はそのうちの2つです。 1つ目はChromeでのみ利用でき、2番目のChrome、PostmanはChromeとFirefoxの両方で利用できます。郵便配達員はよりシンプルでユーザーフレンドリーなようです。先に進んで、試してみてください。
Laravelは、リソースコントローラーを使用してREST APIを構築するための作業を簡素化します。 Emberコンベンションを使用して、インターフェイスをどのように構築するかを確認しました。 Emberは優れたインターフェイスを選択しており、そのロジックに固執することで、他のプラットフォームのコードを簡単に再利用できます。
この部分では、概念にもっと焦点を合わせており、あまりコーディングをしませんでした。すべてのメソッドを埋めて検証を追加すると、この投稿が既に長く、長いシリーズになったときに、この投稿を不必要に拡張しました。開発するときは、常に入力を検証する必要があります。それを忘れないでください、そしてテスト、テスト、テスト。テストはあなたの親友でなければなりません。このシリーズの最終記事では、完全に機能するライブアプリケーションにすべてをまとめます。
Laravelを使用した休憩リソースの構築に関するよくある質問 Laravelでリソースコントローラーを作成するにはどうすればよいですか? Laravel APIリソースを使用するには、最初にリソースクラスを作成する必要があります。これは、Artisan Command PHP Artisan Make:Resource Resourcenameを使用して実行できます。リソースクラスが作成されたら、リソースのToArrayメソッドの変換を定義できます。ルートからリソースを返すには、リソースクラスの新しいインスタンスを返すだけで、変換するデータを渡します。 🎜>リソースクラスのToArrayメソッドを変更することにより、Laravelリソースによって返されたデータをカスタマイズできます。 ToArrayメソッドは、雄弁なモデル属性をAPI応答属性にマッピングする場合です。必要に応じて属性を追加、削除、または変更できますLaravelのリソースとコレクションの違いは何ですか?Laravel Eloquentリソースの目的は何ですか? Eloquent ORMモデルとモデルコレクションはJSON形式になります。これは、APIを構築するときに特に役立ちます。これにより、API応答で送信するデータの正確な形状と形式を制御できます。データ出力を制御するための一貫した管理可能な方法を提供します。
laravel APIリソースを使用するにはどうすればよいですか?
以上がLaravelでRESTリソースを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。