ララベル応答マクロ
この記事では、ララヴィルフレームワークを使用している私の大好きな機能の一つについてお話します.はい、応答マクロです.
私はそれが何であるかを共有し、どのように我々の応答をより簡単に再利用できるように、この機能を使用することができます.
それを始めましょう!
レスポンスマクロは、ルートまたはコントローラで再利用できるカスタムレスポンスです.
REST APIを構築するときは、一般的にユーザーにデータを返すために
また、要求されたデータが見つからないことを伝えたい場合は、
たとえば、これらの類似構文を使用して、残りのAPIを処理します.
基本的に、
オープンファイル
レスポンスマクロを追加した場合は、ルートまたはコントローラ内で使用できます.たとえば、
レスポンスマクロは、単純なカスタムレスポンスのみを追加しません.レスポンスマクロを使用して、マイクロ機能を追加することができます.
たとえば、レスポンスマクロを追加して、MarkdownをHTMLに変換できます.
レスポンスマクロとして応答マクロを使用する場合は、常にそのような検証、データベース操作などの中にビジネスロジックを入れないことを忘れないでください.
私はそれが何であるかを共有し、どのように我々の応答をより簡単に再利用できるように、この機能を使用することができます.
それを始めましょう!
レスポンスマクロとは
レスポンスマクロは、ルートまたはコントローラで再利用できるカスタムレスポンスです.
REST APIを構築するときは、一般的にユーザーにデータを返すために
response()
ヘルパーを使用します.また、要求されたデータが見つからないことを伝えたい場合は、
response()
ヘルパーの変形を使用します.たとえば、これらの類似構文を使用して、残りのAPIを処理します.
// Syntax when sending response with HTTP no content
return response()->json(null, 204);
// Syntax when sending response with HTTP not found
return response()->json(['message' => 'post not found'], 404);
// Syntax when sending response with HTTP created
return response()->json(['message' => 'register success'], 201);
さて、想像してください.これらの応答を簡単な形式に変換することができますが、同じ機能を持っている場合.// Syntax when sending response with HTTP no content
return response()->noContent();
// Syntax when sending response with HTTP not found
return response()->notFound('post not found');
// Syntax when sending response with HTTP created
return response()->created('register success');
それはクールな権利ですか?これらの構文でさえ、それらのレスポンスの実際の動作がユーザにどのようなものを送っているかをはっきりと伝えます.どのように応答マクロを追加するには?
基本的に、
Response
の中で我々のカスタム反応を登録することによって、Laravel App\Providers\AppServiceProvider
オブジェクトの基本的な特徴を拡張するだけです.オープンファイル
app/Providers/AppServiceProvider.php
とIlluminate\Support\Facades\Response
(応答ファサード)を使用します.Response::macro()
メソッド内でカスタム応答を使用するboot
を登録します.Response::macro()
は2つのパラメータを持ちます.カスタムレスポンス名と実装.上記のカスタムレスポンスの1つを加えましょう.<?php
namespace App\Providers;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Response::macro('notFound', function ($message) {
return Response::make(compact('message'), HTTP_NOT_FOUND);
});
}
}
どのように応答マクロを使用する?
レスポンスマクロを追加した場合は、ルートまたはコントローラ内で使用できます.たとえば、
PostController.php
のメソッドshow
を内部に持ちます.<?php
public function show(int $id)
{
$post = Post::find($id);
if (is_null($post)) {
$message = sprintf('Post with id %d not found', $id);
return response()->notFound($message);
}
return new PostResource($post);
}
ボーナス
レスポンスマクロは、単純なカスタムレスポンスのみを追加しません.レスポンスマクロを使用して、マイクロ機能を追加することができます.
たとえば、レスポンスマクロを追加して、MarkdownをHTMLに変換できます.
<?php
public function boot()
{
Response::macro('markdown', function ($raw) {
// fake markdown converter library
$md = new Markdown();
return Response::make(['data' => $md->toHTML($raw)], HTTP_OK);
});
}
あなたのコントローラーの中でそれを使ってください.<?php
public function render(int $id)
{
$post = Post::find($id);
if (is_null($post)) {
$message = sprintf('Post with id %d not found', $id);
return response()->notFound($message);
}
return response()->markdown($post->body);
}
注意:レスポンスマクロとして応答マクロを使用する場合は、常にそのような検証、データベース操作などの中にビジネスロジックを入れないことを忘れないでください.
Reference
この問題について(ララベル応答マクロ), 我々は、より多くの情報をここで見つけました https://dev.to/thexdev/laravel-response-macro-3e8fテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol