سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

CMS نویس مرجعی برای آموزش برنامه نویسی وب و PHP، توسعه افزونه‌های اختصاصی وردپرس، طراحی ورک‌فلو و اتوماسیون با n8n و توسعه CMS های اختصاصی است. هدف ما ارائه آموزش‌های کاربردی و راهکارهای حرفه‌ای برای توسعه‌دهندگان، کسب‌وکارها و علاقه‌مندان به دنیای برنامه‌نویسی است.

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Request و Response در Laravel چیست؟ آموزش کامل مدیریت درخواست و پاسخ

Request و Response در Laravel چیست؟ آموزش کامل مدیریت درخواست و پاسخ

ممدیر کل سیستم ۹ مهر ۱۴۰۵ ۲۱ دقیقه مطالعه ۲ بازدید
Request و Response در Laravel چیست؟ آموزش کامل مدیریت درخواست و پاسخ

وقتی کاربر وارد یک صفحه از یک وب‌سایت می‌شود، فرمی را ارسال می‌کند یا یک درخواست API به سرور می‌فرستد، در واقع یک HTTP Request ایجاد شده است. برنامه Laravel این درخواست را دریافت می‌کند، آن را از بخش‌های مختلف مانند Middleware و Route عبور می‌دهد، منطق موردنظر را اجرا می‌کند و در نهایت یک HTTP Response به کاربر یا کلاینت برمی‌گرداند.

در Laravel تقریباً هر برنامه‌ای با همین چرخه سروکار دارد.

برای مثال، وقتی کاربر یک فرم ثبت‌نام را ارسال می‌کند:


Browser

   ↓

HTTP Request

   ↓

Middleware

   ↓

Route

   ↓

Controller

   ↓

Application Logic

   ↓

HTTP Response

   ↓

Browser

بنابراین درک Request و Response یکی از مفاهیم پایه‌ای و مهم Laravel است؛ مخصوصاً اگر قصد ساخت فرم، پنل مدیریت، فروشگاه اینترنتی، REST API یا نرم‌افزارهای تحت وب را داشته باشید.

در این مقاله از مجموعه آموزش Laravel، با Request و Response در Laravel به‌صورت عملی آشنا می‌شویم.


Request و Response در Laravel چه هستند؟

قبل از اینکه وارد Laravel شویم، بهتر است مفهوم این دو اصطلاح را در سطح HTTP بشناسیم.

Request چیست؟

Request یا درخواست پیامی است که Client برای Server ارسال می‌کند.

Client می‌تواند موارد مختلفی باشد:

  • مرورگر
  • اپلیکیشن موبایل
  • JavaScript
  • Postman
  • یک سرویس دیگر
  • یک API Client

یک Request می‌تواند شامل اطلاعات مختلفی باشد، مانند:

  • آدرس درخواست
  • HTTP Method
  • پارامترهای URL
  • اطلاعات فرم
  • JSON
  • Headerها
  • Cookieها
  • فایل‌های آپلودشده
  • اطلاعات احراز هویت

برای مثال:


POST /users HTTP/1.1

Content-Type: application/json



{

    "name": "Ali",

    "email": "ali@example.com"

}

در اینجا Client یک Request به سرور ارسال کرده است.

Response چیست؟

Response یا پاسخ چیزی است که Server در جواب Request به Client برمی‌گرداند.

Response می‌تواند شامل مواردی مانند موارد زیر باشد:

  • HTML
  • JSON
  • فایل
  • Redirect
  • Status Code
  • Header
  • Cookie

برای مثال یک API ممکن است چنین پاسخی برگرداند:


{

    "message": "User created successfully"

}

بنابراین به‌صورت ساده:

> Request اطلاعاتی است که به سرور می‌فرستیم و Response پاسخی است که از سرور دریافت می‌کنیم.


# Request و Response در Laravel چگونه کار می‌کنند؟

در Laravel معمولاً Request ابتدا وارد برنامه می‌شود و از Middlewareها عبور می‌کند.

سپس Laravel با توجه به Route، درخواست را به Controller یا Closure مربوطه می‌رساند.

در نهایت Controller یا بخش دیگری از برنامه یک Response ایجاد می‌کند.

چرخه کلی به شکل زیر است:


Client

   ↓

Request

   ↓

Laravel

   ↓

Middleware

   ↓

Route

   ↓

Controller

   ↓

Business Logic

   ↓

Response

   ↓

Client

برای مثال:


Route::get('/products', [ProductController::class, 'index']);

اگر کاربر به آدرس زیر مراجعه کند:


/products

Laravel درخواست را دریافت می‌کند، Route مناسب را پیدا می‌کند و متد index کنترلر را اجرا می‌کند.


# Request در Laravel چیست؟

Laravel برای کار با HTTP Request یک کلاس اختصاصی در اختیار توسعه‌دهنده قرار می‌دهد:


Illuminate\Http\Request

معمولاً این کلاس را در Controller به‌صورت Type Hint دریافت می‌کنیم:


use Illuminate\Http\Request;



public function store(Request $request)

{

    //

}

حالا متغیر $request اطلاعات Request فعلی را در اختیار ما قرار می‌دهد.

برای مثال:


public function store(Request $request)

{

    $name = $request->input('name');



    return $name;

}

اگر کاربر در فرم مقدار زیر را ارسال کرده باشد:


name=Ali

مقدار $name برابر خواهد بود با:


Ali


# دریافت اطلاعات ورودی با input()

یکی از پرکاربردترین متدهای Request، متد input() است.

مثلاً:


$name = $request->input('name');

یا:


$email = $request->input('email');

می‌توان مقدار پیش‌فرض نیز تعیین کرد:


$name = $request->input('name', 'Guest');

اگر name ارسال نشده باشد، مقدار Guest برگردانده می‌شود.

مثال:


public function store(Request $request)

{

    $name = $request->input('name', 'Guest');



    return $name;

}


# دریافت تمام داده‌های Request

اگر بخواهیم تمام Inputهای ارسال‌شده را دریافت کنیم، می‌توانیم از all() استفاده کنیم:


$data = $request->all();

مثلاً اگر فرم این اطلاعات را ارسال کند:


name=Ali

email=ali@example.com

age=25

نتیجه چیزی مشابه این خواهد بود:


[

    'name' => 'Ali',

    'email' => 'ali@example.com',

    'age' => 25,

]

البته در پروژه‌های واقعی نباید صرفاً به دریافت تمام داده‌ها اکتفا کنیم؛ مخصوصاً زمانی که قرار است این داده‌ها مستقیماً وارد مدل یا Database شوند.

بهتر است فقط فیلدهای موردنیاز را دریافت کنیم.


# دریافت فقط فیلدهای مشخص با only()

فرض کنید فرم ما شامل این فیلدها است:


name

email

phone

address

is_admin

اما Controller فقط به name و email نیاز دارد.

می‌توانیم بنویسیم:


$data = $request->only([

    'name',

    'email',

]);

نتیجه فقط شامل همین دو مقدار خواهد بود.

این روش برای کنترل دقیق داده‌های ورودی بسیار مناسب‌تر است.


# حذف فیلدهای خاص با except()

گاهی می‌خواهیم تقریباً تمام داده‌ها را دریافت کنیم، اما چند فیلد مشخص را کنار بگذاریم.

برای این کار:


$data = $request->except([

    'is_admin',

]);

مثلاً اگر کاربر فیلدی با نام is_admin ارسال کند، این فیلد از نتیجه حذف خواهد شد.

البته این موضوع جایگزین Authorization و Validation نیست.


# دریافت Query String در Laravel

گاهی اطلاعات به‌صورت Query String در URL ارسال می‌شوند.

مثلاً:


/products?search=laptop&page=2

برای دریافت search می‌توانیم بنویسیم:


$search = $request->query('search');

و برای page:


$page = $request->query('page');

همچنین می‌توان مقدار پیش‌فرض تعیین کرد:


$page = $request->query('page', 1);

در این حالت اگر page وجود نداشته باشد، مقدار 1 استفاده می‌شود.


# تفاوت input() و query()

این دو متد ممکن است در ابتدا کمی گیج‌کننده باشند.

query() مشخصاً برای Query String استفاده می‌شود.

مثلاً:


/products?search=laptop

در حالی که input() برای دریافت Input درخواست استفاده می‌شود و می‌تواند داده‌های ورودی مختلفی را پوشش دهد.

برای مثال:


$request->input('name');

یا:


$request->query('search');

در پروژه‌های واقعی بهتر است متدی را انتخاب کنید که دقیقاً هدف داده را مشخص می‌کند.


# دریافت Route Parameter با Request

فرض کنید Route زیر را داریم:


Route::get('/products/{id}', [ProductController::class, 'show']);

و کاربر وارد این URL شود:


/products/25

می‌توانیم مقدار پارامتر Route را از Request دریافت کنیم:


$id = $request->route('id');

سپس:


public function show(Request $request)

{

    $id = $request->route('id');



    return $id;

}

در این مثال مقدار 25 دریافت می‌شود.

البته در بسیاری از موارد می‌توان Route Parameter را مستقیماً به متد Controller نیز تزریق کرد که روش خواناتری است:


public function show($id)

{

    return $id;

}


# دریافت HTTP Method

می‌توانیم HTTP Method درخواست را با method() دریافت کنیم:


$method = $request->method();

مثلاً ممکن است مقدار آن یکی از موارد زیر باشد:


GET

POST

PUT

PATCH

DELETE

برای بررسی Method نیز می‌توان از isMethod() استفاده کرد:


if ($request->isMethod('post')) {

    //

}

این روش زمانی مفید است که رفتار برنامه بر اساس نوع درخواست تغییر کند.


# دریافت URL درخواست

Laravel امکانات مختلفی برای بررسی URL در اختیار ما قرار می‌دهد.

دریافت URL بدون Query String


$url = $request->url();

دریافت URL کامل


$url = $request->fullUrl();

برای مثال اگر URL این باشد:


/products?search=laptop

fullUrl() اطلاعات Query String را نیز در URL نگه می‌دارد.


# دریافت Header در Laravel

HTTP Request می‌تواند Headerهای مختلفی داشته باشد.

برای مثال:


Accept

Content-Type

Authorization

User-Agent

برای دریافت یک Header می‌توانیم بنویسیم:


$token = $request->header('Authorization');

یا:


$contentType = $request->header('Content-Type');

می‌توانیم بررسی کنیم که یک Header وجود دارد یا خیر:


if ($request->hasHeader('Authorization')) {

    //

}

در APIها استفاده از Header بسیار رایج است.


# دریافت Cookie از Request

Cookie نیز می‌تواند همراه Request ارسال شود.

برای دریافت Cookie:


$value = $request->cookie('theme');

مثلاً:


$theme = $request->cookie('theme', 'light');

اگر Cookie موردنظر وجود نداشته باشد، مقدار light استفاده خواهد شد.


# بررسی وجود یک Input

می‌توانیم بررسی کنیم که یک فیلد در Request وجود دارد یا خیر.

مثلاً:


if ($request->has('email')) {

    //

}

برای چند فیلد نیز می‌توانیم از آرایه استفاده کنیم:


if ($request->has(['name', 'email'])) {

    //

}


# تفاوت has() و filled()

این دو متد کاربرد مشابهی دارند اما یکسان نیستند.

برای مثال:


$request->has('name');

وجود فیلد را بررسی می‌کند.

اما:


$request->filled('name');

بررسی می‌کند که فیلد دارای مقدار پرشده باشد.

برای فرم‌ها و فیلترهای جستجو، filled() در بسیاری از سناریوها کاربردی است.

مثلاً:


if ($request->filled('search')) {

    $search = $request->input('search');

}


# دریافت User فعلی

اگر کاربر احراز هویت شده باشد، Laravel می‌تواند User فعلی را در اختیار Request قرار دهد.

مثلاً:


$user = $request->user();

یا:


$userId = $request->user()?->id;

البته اینکه User در دسترس باشد به سیستم Authentication و Middlewareهای پروژه بستگی دارد.

بنابراین نباید فرض کنیم هر Request الزاماً یک User احراز هویت‌شده دارد.


# دریافت فایل از Request

وقتی یک فرم فایل ارسال می‌کند، می‌توان فایل را از Request دریافت کرد.

مثلاً:


$file = $request->file('image');

می‌توان وجود فایل را نیز بررسی کرد:


if ($request->hasFile('image')) {

    //

}

برای آپلود فایل، علاوه بر Request، مباحثی مانند Validation و Storage نیز اهمیت دارند که در مقالات مربوط به Validation، File Upload و Storage به‌صورت تخصصی بررسی می‌شوند.


# تغییر یا اضافه کردن Input در Request

گاهی لازم است قبل از ادامه پردازش Request، مقداری به آن اضافه کنیم.

برای مثال:


$request->merge([

    'source' => 'website',

]);

حالا:


$request->input('source');

مقدار زیر را برمی‌گرداند:


website

این قابلیت در بعضی سناریوهای پردازش داده مفید است.

با این حال، نباید بدون دلیل Request اصلی را تغییر دهیم؛ مخصوصاً در پروژه‌های بزرگ که خوانایی جریان داده اهمیت زیادی دارد.


# Response در Laravel چیست؟

بعد از اینکه Laravel درخواست را پردازش کرد، باید پاسخی به Client برگرداند.

این پاسخ همان Response است.

ساده‌ترین حالت:


return 'Hello World';

Laravel این مقدار را به یک HTTP Response تبدیل می‌کند.

اما در پروژه‌های حرفه‌ای معمولاً Responseها ساختار مشخص‌تری دارند.


# ساخت Response با response()

Laravel یک Helper به نام response() دارد.

مثلاً:


return response('Hello World');

می‌توان Status Code نیز تعیین کرد:


return response('Created', 201);

در اینجا Response با Status Code برابر 201 ارسال می‌شود.


# JSON Response در Laravel

یکی از مهم‌ترین کاربردهای Response در Laravel، ساخت پاسخ JSON است.

برای این کار:


return response()->json([

    'message' => 'Success',

]);

Laravel خروجی JSON مناسب را برای Client ایجاد می‌کند.

مثلاً:


{

    "message": "Success"

}

این نوع Response در REST APIها بسیار پرکاربرد است.


# ارسال Status Code همراه JSON

می‌توانیم Status Code را نیز مشخص کنیم:


return response()->json([

    'message' => 'User created successfully',

], 201);

در این مثال:


HTTP Status: 201 Created

برگردانده می‌شود.


# ارسال داده‌های بیشتر در JSON Response

مثلاً:


return response()->json([

    'success' => true,

    'message' => 'Product created successfully',

    'data' => [

        'id' => 25,

        'name' => 'Laptop',

    ],

], 201);

نتیجه:


{

    "success": true,

    "message": "Product created successfully",

    "data": {

        "id": 25,

        "name": "Laptop"

    }

}

این ساختار برای APIها بسیار رایج است.


# HTTP Status Code چیست؟

Status Code مشخص می‌کند نتیجه پردازش Request چه بوده است.

برخی Status Codeهای مهم عبارت‌اند از:

Status Codeمفهوم
200درخواست با موفقیت پردازش شد
201منبع جدید ایجاد شد
204درخواست موفق بود اما محتوایی برای Response وجود ندارد
301Redirect دائمی
302Redirect موقت
400درخواست نامعتبر
401احراز هویت موردنیاز است
403دسترسی مجاز نیست
404منبع پیدا نشد
422داده‌های ارسال‌شده قابل پردازش نیستند؛ معمولاً برای Validation
429تعداد درخواست‌ها بیش از حد مجاز است
500خطای داخلی سرور

انتخاب Status Code مناسب باعث می‌شود Frontend، اپلیکیشن موبایل و سایر Clientها بهتر بتوانند نتیجه درخواست را تشخیص دهند.


# Redirect در Laravel

در برنامه‌های معمولی وب، همیشه لازم نیست JSON برگردانیم.

گاهی می‌خواهیم کاربر را به صفحه دیگری منتقل کنیم.

مثلاً:


return redirect('/dashboard');

یا:


return redirect()->route('dashboard');

اگر Route نام داشته باشد، روش دوم معمولاً خواناتر و قابل‌نگهداری‌تر است.


# Redirect به صفحه قبلی

یکی از کاربردهای رایج:


return redirect()->back();

این روش معمولاً بعد از پردازش فرم‌ها کاربرد دارد.

مثلاً:


public function store(Request $request)

{

    // ذخیره اطلاعات



    return redirect()->back();

}


# ارسال پیام همراه Redirect

می‌توانیم یک پیام نیز همراه Redirect ارسال کنیم:


return redirect()

    ->route('products.index')

    ->with('success', 'محصول با موفقیت ایجاد شد.');

سپس در View می‌توان این پیام را نمایش داد.

مثلاً:


@if (session('success'))

    <div>

        {{ session('success') }}

    </div>

@endif

این الگو در پنل‌های مدیریت بسیار کاربردی است.


# Response همراه Header سفارشی

می‌توان Header سفارشی نیز به Response اضافه کرد.

مثلاً:


return response('Hello')

    ->header('X-App-Version', '1.0');

یا برای چند Header:


return response('Hello')

    ->withHeaders([

        'X-App-Version' => '1.0',

        'X-App-Type' => 'Laravel',

    ]);

این قابلیت در APIها و ارتباط بین سرویس‌ها کاربرد دارد.


# ارسال Cookie در Response

Laravel امکان اضافه کردن Cookie به Response را نیز فراهم می‌کند.

مثلاً:


return response('Saved')

    ->cookie('theme', 'dark');

در این حالت Cookie همراه Response برای Client ارسال می‌شود.

در پروژه‌های واقعی باید هنگام استفاده از Cookie به موارد امنیتی مانند Secure، HttpOnly و SameSite نیز توجه شود.


# Response برای View

Response فقط برای JSON نیست.

می‌توانیم یک View را نیز به‌عنوان Response برگردانیم:


return response()->view('products.index', [

    'products' => $products,

]);

البته در Laravel معمولاً می‌توان ساده‌تر نوشت:


return view('products.index', [

    'products' => $products,

]);

Laravel خودش View را به Response مناسب تبدیل می‌کند.


# Response برای دانلود فایل

Laravel می‌تواند Response مربوط به دانلود فایل ایجاد کند.

مثلاً:


return response()->download(

    storage_path('app/report.pdf')

);

در این حالت مرورگر فایل را به‌عنوان فایل قابل دانلود دریافت می‌کند.

برای فایل‌های حساس باید قبل از ارسال فایل، دسترسی کاربر را بررسی کنیم.


# نمایش فایل به جای دانلود

گاهی می‌خواهیم فایل در مرورگر نمایش داده شود.

برای مثال:


return response()->file(

    storage_path('app/document.pdf')

);

تفاوت آن با download() در نحوه ارائه فایل به Client است.


# تفاوت Request و Response در Laravel

تفاوت این دو مفهوم را می‌توان خیلی ساده در جدول زیر مشاهده کرد:

ویژگیRequestResponse
جهت حرکتClient → ServerServer → Client
کاربرددریافت اطلاعاتارسال نتیجه
نمونهفرم، Query، HeaderHTML، JSON، Redirect
کلاس اصلیRequestResponse
مثال$request->input()response()->json()
زمان استفادههنگام پردازش ورودیهنگام برگرداندن نتیجه

به بیان ساده:


Request  = چه چیزی از کاربر/Client دریافت کرده‌ایم؟

Response = در جواب آن چه چیزی برگردانیم؟


# یک مثال واقعی: دریافت اطلاعات فرم

فرض کنید فرم زیر را داریم:


<form method="POST" action="/products">

    @csrf



    <input type="text" name="name">

    <input type="number" name="price">



    <button type="submit">

        ذخیره محصول

    </button>

</form>

Route:


Route::post('/products', [ProductController::class, 'store']);

Controller:


use Illuminate\Http\Request;



public function store(Request $request)

{

    $name = $request->input('name');

    $price = $request->input('price');



    // ذخیره محصول



    return redirect()

        ->route('products.index')

        ->with('success', 'محصول با موفقیت ذخیره شد.');

}

در این مثال چند مفهوم را همزمان داریم:

  1. Browser یک Request ارسال می‌کند.
  2. Laravel Request را دریافت می‌کند.
  3. Middleware مربوطه اجرا می‌شود.
  4. Route به Controller متصل می‌شود.
  5. Controller اطلاعات را از $request دریافت می‌کند.
  6. اطلاعات پردازش می‌شوند.
  7. Laravel یک Redirect Response برمی‌گرداند.
  8. کاربر به صفحه محصولات منتقل می‌شود.

# مثال واقعی: ساخت API با Request و Response

فرض کنید API زیر را داریم:


Route::post('/api/products', [ProductController::class, 'store']);

Controller:


use Illuminate\Http\Request;



public function store(Request $request)

{

    $name = $request->input('name');

    $price = $request->input('price');



    // ذخیره محصول



    return response()->json([

        'success' => true,

        'message' => 'Product created successfully',

        'data' => [

            'name' => $name,

            'price' => $price,

        ],

    ], 201);

}

اگر Client این JSON را ارسال کند:


{

    "name": "Laptop",

    "price": 50000000

}

Laravel می‌تواند آن را با Request دریافت کند:


$request->input('name');

و در نهایت JSON Response مشابه زیر برگرداند:


{

    "success": true,

    "message": "Product created successfully",

    "data": {

        "name": "Laptop",

        "price": 50000000

    }

}

این الگوی ساده، پایه بسیاری از APIهای Laravel است.


# Request و Validation چه ارتباطی با هم دارند؟

یکی از نکات مهم این است که Request به‌تنهایی به معنی معتبر بودن داده‌ها نیست.

مثلاً:


$name = $request->input('name');

صرفاً به این معنی است که مقدار name را دریافت کرده‌ایم.

این کد نمی‌گوید:

  • آیا name ارسال شده؟
  • آیا رشته است؟
  • آیا بیش از حد طولانی است؟
  • آیا مقدار مناسبی دارد؟
  • آیا کاربر اجازه ارسال این مقدار را دارد؟

به همین دلیل مرحله بعدی در پردازش فرم‌ها معمولاً Validation است.

برای مثال:


$request->validate([

    'name' => ['required', 'string', 'max:255'],

]);

Validation یکی از مهم‌ترین مباحث Laravel است و در مقاله بعدی این مجموعه به‌صورت کامل بررسی خواهد شد.


# اشتباهات رایج هنگام کار با Request

۱. اعتماد کردن مستقیم به داده‌های کاربر

نباید فرض کنیم هر چیزی که از Request دریافت می‌کنیم معتبر است.

مثلاً:


$email = $request->input('email');

این فقط داده را دریافت می‌کند.

برای استفاده جدی از آن باید Validation و کنترل‌های امنیتی مناسب داشته باشیم.


۲. استفاده بی‌دلیل از all()

گاهی توسعه‌دهنده تمام Request را دریافت می‌کند:


$data = $request->all();

و سپس آن را مستقیماً برای عملیات حساس استفاده می‌کند.

این کار می‌تواند باعث ورود داده‌هایی شود که برنامه انتظارشان را نداشته است.

در موارد لازم بهتر است داده‌های موردنیاز را مشخص کنیم:


$data = $request->only([

    'name',

    'email',

]);


۳. اشتباه گرفتن Query String و Body

مثلاً این URL:


/products?search=laptop

دارای Query String است.

در حالی که یک Request POST می‌تواند داده‌ها را در Body ارسال کند.

شناخت تفاوت این بخش‌ها در طراحی API و فرم‌ها بسیار مهم است.


۴. استفاده از Status Code نامناسب

مثلاً اگر یک API با موفقیت یک Resource جدید ایجاد کرده است، Response آن نباید صرفاً یک متن نامشخص باشد.

بهتر است Response ساختار مشخص و Status Code مناسب داشته باشد:


return response()->json([

    'message' => 'Created',

], 201);


۵. قرار دادن اطلاعات حساس در Response

نباید اطلاعاتی مانند:

  • Password
  • Secret Key
  • Tokenهای حساس
  • اطلاعات خصوصی کاربران

را بدون دلیل در JSON Response قرار دهیم.

Response API باید فقط اطلاعات موردنیاز Client را برگرداند.


# بهترین روش‌ها برای کار با Request و Response در Laravel

برای پروژه‌های واقعی بهتر است چند اصل را رعایت کنید.

۱. ورودی کاربر را معتبر فرض نکنید

هر داده‌ای که از Client می‌آید باید متناسب با کاربردش بررسی شود.

۲. فقط داده موردنیاز را دریافت کنید

به‌جای:


$request->all();

در صورت نیاز از:


$request->only([

    'name',

    'email',

]);

استفاده کنید.

۳. Responseهای API را ساختاریافته نگه دارید

مثلاً:


return response()->json([

    'success' => true,

    'message' => 'Operation completed.',

    'data' => $data,

]);

۴. Status Code مناسب استفاده کنید

Status Code بخشی از قرارداد API است و Client می‌تواند از آن برای تشخیص نتیجه استفاده کند.

۵. منطق سنگین را داخل Controller قرار ندهید

Controller بهتر است مسئول دریافت Request، هماهنگ کردن عملیات و برگرداندن Response باشد.

منطق پیچیده کسب‌وکار را می‌توان در Serviceها یا ساختارهای مناسب‌تر پروژه قرار داد.

۶. اطلاعات حساس را به Client برنگردانید

هر چیزی که در Response قرار می‌دهید بالقوه در اختیار Client قرار می‌گیرد.


# Request و Response در معماری Laravel چه جایگاهی دارند؟

در یک پروژه واقعی ممکن است جریان به شکل زیر باشد:


HTTP Request

     ↓

Middleware

     ↓

Route

     ↓

Controller

     ↓

Form Request / Validation

     ↓

Service

     ↓

Model / Database

     ↓

Resource / Response

     ↓

HTTP Response

این معماری باعث می‌شود هر بخش مسئولیت مشخصی داشته باشد.

مثلاً:

Request

داده‌های Client را وارد برنامه می‌کند.

Middleware

مواردی مانند Authentication، Authorization یا محدودیت‌های دیگر را کنترل می‌کند.

Controller

جریان درخواست را مدیریت می‌کند.

Validation / Form Request

صحت داده‌های ورودی را بررسی می‌کند.

Service

منطق کسب‌وکار را اجرا می‌کند.

Model

با داده و Database کار می‌کند.

Response

نتیجه را به Client برمی‌گرداند.

این تفکیک مسئولیت‌ها در پروژه‌های بزرگ Laravel اهمیت بسیار زیادی پیدا می‌کند.


# جمع‌بندی

Request و Response از اساسی‌ترین مفاهیم توسعه وب با Laravel هستند.

هر بار که کاربر صفحه‌ای را باز می‌کند، فرمی ارسال می‌کند یا یک API را فراخوانی می‌کند، یک Request وارد برنامه می‌شود. Laravel این Request را پردازش کرده و در نهایت Response مناسب را به Client برمی‌گرداند.

در Laravel با استفاده از کلاس Request می‌توان به اطلاعات مختلفی مانند موارد زیر دسترسی پیدا کرد:

  • Inputهای فرم
  • Query String
  • Route Parameter
  • Header
  • Cookie
  • فایل
  • HTTP Method
  • User احراز هویت‌شده

از طرف دیگر، با ابزارهایی مانند:


response()

و:


response()->json()

می‌توان Responseهای مختلفی ایجاد کرد؛ از HTML و JSON گرفته تا Redirect، فایل و Responseهای دارای Header یا Cookie.

درک صحیح Request و Response پایه مهمی برای مباحث پیشرفته‌تر Laravel مانند Validation، Form Request، Authentication، REST API و ساخت نرم‌افزارهای حرفه‌ای است.


# سوالات متداول

Request در Laravel چیست؟

Request شیئی است که اطلاعات درخواست HTTP فعلی را در اختیار برنامه Laravel قرار می‌دهد. از طریق آن می‌توان اطلاعاتی مانند Input، Query String، Header، Cookie و فایل‌های ارسال‌شده را دریافت کرد.

چگونه اطلاعات فرم را در Laravel دریافت کنیم؟

با استفاده از شیء Request:


$name = $request->input('name');

چگونه JSON Response در Laravel ایجاد کنیم؟

می‌توان از response()->json() استفاده کرد:


return response()->json([

    'message' => 'Success',

]);

چگونه Status Code را در Laravel تغییر دهیم؟

می‌توان Status Code را به‌عنوان آرگومان دوم JSON Response مشخص کرد:


return response()->json([

    'message' => 'Created',

], 201);

تفاوت Request و Response چیست؟

Request از Client به Server ارسال می‌شود و Response نتیجه پردازش Server است که به Client برگردانده می‌شود.

آیا Request داده‌های معتبر را تضمین می‌کند؟

خیر. Request فقط داده‌های ارسال‌شده را در اختیار برنامه قرار می‌دهد. برای بررسی صحت داده‌ها باید از Validation استفاده شود.

آیا می‌توان در Laravel Header سفارشی به Response اضافه کرد؟

بله:


return response('Hello')

    ->header('X-App-Version', '1.0');

آیا Laravel برای API مناسب است؟

بله. Laravel امکانات متعددی برای ساخت API دارد و Request و Response یکی از پایه‌های اصلی این معماری هستند.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه