درخواست های HTTP
معرفی
    
        کلاس لاراول 
    Illuminate\Http\Request
    
        یک روش شی گرا برای تعامل با درخواست HTTP فعلی که توسط برنامه شما مدیریت می شود و همچنین بازیابی ورودی، کوکی ها و فایل هایی که همراه با درخواست ارسال شده اند را ارائه می دهد.
    
تعامل با درخواست
دسترسی به درخواست
    Illuminate\Http\Request
    
        برای به دست آوردن نمونه ای از درخواست HTTP فعلی از طریق تزریق وابستگی، باید کلاس را در روش بسته شدن مسیر یا کنترلر خود 
        تایپ کنید . 
        نمونه درخواست ورودی به طور خودکار توسط 
    
        
            کانتینر سرویس
        
    
    
         لاراول تزریق می شود :
    
<?php namespace App\Http\Controllers; use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request; class UserController extends Controller{    /**     * Store a new user.     */    public function store(Request $request): RedirectResponse    {        $name = $request->input('name');         // Store the user...         return redirect('/users');    }}
    Illuminate\Http\Request
    
        همانطور که گفته شد، شما همچنین می توانید کلاس را در مورد بسته شدن مسیر 
        تایپ کنید . 
        کانتینر سرویس به طور خودکار درخواست دریافتی را در زمان اجرای بسته شدن، تزریق می کند:
    
use Illuminate\Http\Request; Route::get('/', function (Request $request) {    // ...});تزریق وابستگی و پارامترهای مسیر
اگر روش کنترلر شما نیز انتظار ورودی از پارامتر مسیر را دارد، باید پارامترهای مسیر خود را بعد از وابستگی های دیگر فهرست کنید. برای مثال، اگر مسیر شما به این صورت تعریف شده باشد:
use App\Http\Controllers\UserController; Route::put('/user/{id}', [UserController::class, 'update']);
    
        همچنان می توانید با تعریف روش کنترلر خود به صورت زیر، پارامتر مسیر خود 
        را تایپ کنید 
    Illuminate\Http\Request
    
        و به آن دسترسی پیدا کنید :
    id
    
<?php namespace App\Http\Controllers; use Illuminate\Http\RedirectResponse;use Illuminate\Http\Request; class UserController extends Controller{    /**     * Update the specified user.     */    public function update(Request $request, string $id): RedirectResponse    {        // Update the user...         return redirect('/users');    }}درخواست مسیر، میزبان و روش
    
        این 
    Illuminate\Http\Request
    
        نمونه روشهای مختلفی را برای بررسی درخواست HTTP ورودی ارائه میکند و 
    Symfony\Component\HttpFoundation\Request
    
        کلاس را گسترش میدهد. در ادامه به چند مورد از مهم ترین روش ها خواهیم پرداخت.
    
بازیابی مسیر درخواست
    
        متد 
    path
    
        اطلاعات مسیر درخواست را برمی گرداند. بنابراین، اگر درخواست ورودی در هدف قرار گیرد 
    http://example.com/foo/bar
    
        ، 
    path
    
        متد برمی گردد 
    foo/bar
    
        :
    
$uri = $request->path();بازرسی مسیر / مسیر درخواست
    
        این 
    is
    
        روش به شما اجازه می دهد تا بررسی کنید که مسیر درخواست ورودی با یک الگوی مشخص مطابقت دارد. هنگام استفاده از این روش 
        ، می توانید از 
    *
    
        کاراکتر به عنوان علامت عام استفاده کنید:
    
if ($request->is('admin/*')) {    // ...}
    
        با استفاده از 
    routeIs
    
        روش، می توانید تعیین کنید که آیا درخواست ورودی با یک 
    
        
            مسیر نامگذاری شده
        
    
    
         مطابقت دارد یا خیر :
    
if ($request->routeIs('admin.*')) {    // ...}بازیابی URL درخواست
    
        برای بازیابی URL کامل برای درخواست ورودی، می توانید از روش های 
    url
    
        یا استفاده کنید 
    fullUrl
    
        . متد 
    url
    
        URL را بدون رشته پرس و جو برمی گرداند، در حالی که 
    fullUrl
    
        متد شامل رشته پرس و جو است:
    
$url = $request->url(); $urlWithQueryString = $request->fullUrl();
    
        اگر می خواهید داده های رشته پرس و جو را به URL فعلی اضافه کنید، می توانید 
    fullUrlWithQuery
    
        روش را فراخوانی کنید. این روش آرایه داده شده از متغیرهای رشته پرس و جو را با رشته پرس و جو فعلی ادغام می کند:
    
$request->fullUrlWithQuery(['type' => 'phone']);
    
        اگر می خواهید URL فعلی را بدون پارامتر رشته پرس و جو دریافت کنید، می توانید از 
    fullUrlWithoutQuery
    
        روش استفاده کنید:
    
$request->fullUrlWithoutQuery(['type']);بازیابی میزبان درخواست
    
        میتوانید «میزبان» درخواست ورودی را از طریق روشهای 
    host
    
        ، 
    httpHost
    
        و و بازیابی کنید 
    schemeAndHttpHost
    
        :
    
$request->host();$request->httpHost();$request->schemeAndHttpHost();بازیابی روش درخواست
    
        این 
    method
    
        متد فعل HTTP را برای درخواست برمی گرداند. میتوانید از این 
    isMethod
    
        روش برای تأیید اینکه فعل HTTP با یک رشته معین مطابقت دارد استفاده کنید:
    
$method = $request->method(); if ($request->isMethod('post')) {    // ...}سرصفحه های درخواستی
    Illuminate\Http\Request
    
        میتوانید با استفاده از روش، 
        سرصفحه درخواست را از نمونه بازیابی کنید 
    header
    
        . اگر هدر در درخواست موجود نباشد، 
    null
    
        برگردانده می شود. با این حال، 
    header
    
        متد یک آرگومان دوم اختیاری را میپذیرد که اگر هدر در درخواست وجود نداشته باشد، برگردانده میشود:
    
$value = $request->header('X-Header-Name'); $value = $request->header('X-Header-Name', 'default');
    
        این 
    hasHeader
    
        متد ممکن است برای تعیین اینکه آیا درخواست حاوی یک هدر معین است یا خیر استفاده شود:
    
if ($request->hasHeader('X-Header-Name')) {    // ...}
    
        برای راحتی، این 
    bearerToken
    
        روش ممکن است برای بازیابی توکن حامل از 
    Authorization
    
        هدر استفاده شود. اگر چنین هدری وجود نداشته باشد، یک رشته خالی برگردانده می شود:
    
$token = $request->bearerToken();درخواست آدرس IP
    
        این 
    ip
    
        روش ممکن است برای بازیابی آدرس IP مشتری که درخواست را به برنامه شما ارسال کرده است استفاده شود:
    
$ipAddress = $request->ip();
    
        اگر میخواهید آرایهای از آدرسهای IP، شامل تمام آدرسهای IP مشتری که توسط پراکسیها ارسال شدهاند، بازیابی کنید، میتوانید از این 
    ips
    
        روش استفاده کنید. آدرس IP مشتری "اصلی" در انتهای آرایه خواهد بود:
    
$ipAddresses = $request->ips();به طور کلی، آدرس های IP باید ورودی غیرقابل اعتماد و کنترل شده توسط کاربر در نظر گرفته شوند و فقط برای اهداف اطلاعاتی استفاده شوند.
مذاکره محتوا
    
        لاراول چندین روش برای بررسی انواع محتوای درخواستی درخواست ورودی از طریق 
    Accept
    
        هدر ارائه می دهد. ابتدا، 
    getAcceptableContentTypes
    
        متد یک آرایه حاوی تمام انواع محتوای پذیرفته شده توسط درخواست را برمی گرداند:
    
$contentTypes = $request->getAcceptableContentTypes();
    
        این 
    accepts
    
        متد آرایه ای از انواع محتوا را می پذیرد و 
    true
    
        اگر هر یک از انواع محتوا توسط درخواست پذیرفته شود، برمی گردد. در غیر این صورت 
    false
    
        بازگردانده می شود:
    
if ($request->accepts(['text/html', 'application/json'])) {    // ...}
    
        شما میتوانید از این 
    prefers
    
        روش برای تعیین اینکه کدام نوع محتوا از یک آرایه از انواع محتوا بیشتر مورد پسند درخواست است استفاده کنید. اگر هیچ یک از انواع محتوای ارائه شده توسط درخواست پذیرفته نشد، 
    null
    
        برگردانده می شود:
    
$preferred = $request->prefers(['text/html', 'application/json']);
    
        از آنجایی که بسیاری از برنامهها فقط HTML یا JSON را ارائه میکنند، میتوانید از این 
    expectsJson
    
        روش برای تعیین سریع اینکه آیا درخواست ورودی انتظار پاسخ JSON را دارد یا خیر استفاده کنید:
    
if ($request->expectsJson()) {    // ...}درخواست های PSR-7
استاندارد PSR -7 رابط هایی را برای پیام های HTTP از جمله درخواست ها و پاسخ ها مشخص می کند. اگر می خواهید به جای درخواست لاراول نمونه ای از درخواست PSR-7 را دریافت کنید، ابتدا باید چند کتابخانه را نصب کنید. لاراول از مؤلفه Symfony HTTP Message Bridge برای تبدیل درخواست ها و پاسخ های معمولی لاراول به پیاده سازی های سازگار با PSR-7 استفاده می کند:
composer require symfony/psr-http-message-bridgecomposer require nyholm/psr7هنگامی که این کتابخانه ها را نصب کردید، می توانید یک درخواست PSR-7 را با تایپ کردن رابط درخواست در روش بسته شدن مسیر یا کنترلر خود دریافت کنید:
use Psr\Http\Message\ServerRequestInterface; Route::get('/', function (ServerRequestInterface $request) {    // ...});اگر یک نمونه پاسخ PSR-7 را از یک مسیر یا کنترلر برگردانید، به طور خودکار به یک نمونه پاسخ لاراول تبدیل شده و توسط فریمورک نمایش داده می شود.
ورودی
بازیابی ورودی
بازیابی همه داده های ورودی
    
        میتوانید تمام دادههای ورودی درخواست ورودی را با 
    array
    
        استفاده از 
    all
    
        روش بازیابی کنید. این روش ممکن است صرف نظر از اینکه درخواست دریافتی از یک فرم HTML است یا یک درخواست XHR استفاده شود:
    
$input = $request->all();
    
        با استفاده از 
    collect
    
        روش، میتوانید تمام دادههای ورودی درخواست ورودی را بهصورت 
    
        
            مجموعه
        
    
    
         بازیابی کنید :
    
$input = $request->collect();
    
        این 
    collect
    
        روش همچنین به شما امکان می دهد زیرمجموعه ای از ورودی درخواست ورودی را به عنوان مجموعه بازیابی کنید:
    
$request->collect('users')->each(function (string $user) {    // ...});بازیابی یک مقدار ورودی
    
        با استفاده از چند روش ساده، می توانید به تمام ورودی های کاربر از 
    Illuminate\Http\Request
    
        نمونه خود دسترسی داشته باشید بدون اینکه نگران باشید که کدام فعل HTTP برای درخواست استفاده شده است. صرف نظر از فعل HTTP، این 
    input
    
        روش ممکن است برای بازیابی ورودی کاربر استفاده شود:
    
$name = $request->input('name');
    
        می توانید یک مقدار پیش فرض را به عنوان آرگومان دوم به 
    input
    
        متد ارسال کنید. اگر مقدار ورودی درخواستی در درخواست وجود نداشته باشد، این مقدار برگردانده می شود:
    
$name = $request->input('name', 'Sally');هنگام کار با فرم هایی که حاوی ورودی های آرایه هستند، برای دسترسی به آرایه ها از نماد "نقطه" استفاده کنید:
$name = $request->input('products.0.name'); $names = $request->input('products.*.name');
    
        شما می توانید 
    input
    
        متد را بدون هیچ آرگومان فراخوانی کنید تا همه مقادیر ورودی را به عنوان یک آرایه انجمنی بازیابی کنید:
    
$input = $request->input();بازیابی ورودی از رشته Query
    
        در حالی که 
    input
    
        متد مقادیر را از کل بار درخواست (شامل رشته پرس و جو) بازیابی می کند، این 
    query
    
        روش فقط مقادیر را از رشته پرس و جو بازیابی می کند:
    
$name = $request->query('name');اگر داده های مقدار رشته کوئری درخواستی وجود نداشته باشد، آرگومان دوم به این متد برگردانده می شود:
$name = $request->query('name', 'Helen');
    
        شما می توانید 
    query
    
        متد را بدون هیچ آرگومان فراخوانی کنید تا تمام مقادیر رشته پرس و جو را به عنوان یک آرایه انجمنی بازیابی کنید:
    
$query = $request->query();بازیابی مقادیر ورودی JSON
    
        هنگام ارسال درخواستهای JSON به برنامه خود، میتوانید از طریق روش به دادههای JSON دسترسی داشته باشید 
    input
    
        تا زمانی که 
    Content-Type
    
        هدر درخواست به درستی روی 
    application/json
    
        . حتی میتوانید از نحو «نقطه» برای بازیابی مقادیری که درون آرایهها/اشیاء JSON تودرتو هستند استفاده کنید:
    
$name = $request->input('user.name');بازیابی مقادیر ورودی رشته ای
    
        به جای بازیابی داده های ورودی درخواست به عنوان یک نمونه اولیه 
    string
    
        ، می توانید از 
    string
    
        روش برای بازیابی داده های درخواست به عنوان نمونه ای از 
    Illuminate\Support\Stringable
    
        :
    
$name = $request->string('name')->trim();بازیابی مقادیر ورودی بولی
    
        هنگامی که با عناصر HTML مانند چک باکس ها سر و کار دارید، برنامه شما ممکن است مقادیر "واقعی" را دریافت کند که در واقع رشته هستند. مثلاً «درست» یا «روشن». برای راحتی، می توانید از 
    boolean
    
        روش برای بازیابی این مقادیر به عنوان بولی استفاده کنید. این 
    boolean
    
        روش 
    true
    
        برای 1، "1"، true، "true"، "on" و "yes" برمی گردد. همه مقادیر دیگر باز خواهند گشت 
    false
    
        :
    
$archived = $request->boolean('archived');بازیابی مقادیر ورودی تاریخ
    
        برای راحتی، مقادیر ورودی حاوی تاریخ/زمان ممکن است به عنوان نمونه کربن با استفاده از 
    date
    
        روش بازیابی شوند. اگر درخواست حاوی مقدار ورودی با نام داده شده نباشد، 
    null
    
        برگردانده می شود:
    
$birthday = $request->date('birthday');
    
        آرگومان های دوم و سوم پذیرفته شده توسط 
    date
    
        روش ممکن است به ترتیب برای تعیین قالب تاریخ و منطقه زمانی استفاده شوند:
    
$elapsed = $request->date('elapsed', '!H:i', 'Europe/Madrid');
    
        اگر مقدار ورودی وجود داشته باشد اما فرمت نامعتبر داشته باشد، یک 
    InvalidArgumentException
    
        پرتاب می شود. بنابراین، توصیه می شود قبل از فراخوانی روش، ورودی را تأیید کنید 
    date
    
        .
    
بازیابی مقادیر ورودی Enum
    
        مقادیر ورودی که با 
    
        
            شماره های PHP
        
    
    
         مطابقت دارند نیز ممکن است از درخواست بازیابی شوند. اگر درخواست حاوی مقدار ورودی با نام داده شده نباشد یا enum دارای مقدار پشتوانه منطبق با مقدار ورودی نباشد، 
    null
    
        برگردانده می شود. متد 
    enum
    
        نام مقدار ورودی و کلاس enum را به عنوان آرگومان های اول و دوم می پذیرد:
    
use App\Enums\Status; $status = $request->enum('status', Status::class);بازیابی ورودی از طریق Dynamic Properties
    
        همچنین میتوانید با استفاده از ویژگیهای پویا در 
    Illuminate\Http\Request
    
        نمونه به ورودی کاربر دسترسی داشته باشید. به عنوان مثال، اگر یکی از فرم های برنامه شما حاوی یک 
    name
    
        فیلد باشد، می توانید به مقدار فیلد مانند زیر دسترسی داشته باشید:
    
$name = $request->name;هنگام استفاده از ویژگی های پویا، لاراول ابتدا به دنبال مقدار پارامتر در بار درخواست می شود. اگر وجود نداشته باشد، لاراول فیلد را در پارامترهای مسیر منطبق جستجو می کند.
بازیابی بخشی از داده های ورودی
    
        اگر نیاز به بازیابی زیرمجموعه ای از داده های ورودی دارید، می توانید از روش 
    only
    
        و استفاده کنید 
    except
    
        . هر دوی این روش ها یک 
    array
    
        لیست واحد یا پویا از آرگومان ها را می پذیرند:
    
$input = $request->only(['username', 'password']); $input = $request->only('username', 'password'); $input = $request->except(['credit_card']); $input = $request->except('credit_card');متد
onlyتمام جفتهای کلید/مقدار مورد درخواست شما را برمیگرداند. با این حال، جفتهای کلید/مقدار را که در درخواست وجود ندارد، برنمیگرداند.
حضور ورودی
    
        می توانید از 
    has
    
        روش برای تعیین اینکه آیا مقداری در درخواست وجود دارد یا خیر استفاده کنید. 
        اگر مقدار در درخواست موجود باشد، 
        متد 
    has
    
        برمی گردد :
    true
    
if ($request->has('name')) {    // ...}
    
        هنگامی که یک آرایه داده می شود، 
    has
    
        روش تعیین می کند که آیا همه مقادیر مشخص شده وجود دارند یا خیر:
    
if ($request->has(['name', 'email'])) {    // ...}
    
        اگر هر یک از مقادیر مشخص شده وجود داشته باشد، 
        متد 
    hasAny
    
        برمی گردد :
    true
    
if ($request->hasAny(['name', 'email'])) {    // ...}
    whenHas
    
        اگر مقداری در درخواست وجود داشته باشد، 
        این روش بسته شدن داده شده را اجرا می کند:
    
$request->whenHas('name', function (string $input) {    // ...});
    
        بسته شدن دوم ممکن است به روشی منتقل شود 
    whenHas
    
        که اگر مقدار مشخص شده در درخواست وجود نداشته باشد، اجرا خواهد شد:
    
$request->whenHas('name', function (string $input) {    // The "name" value is present...}, function () {    // The "name" value is not present...});
    
        اگر می خواهید تعیین کنید که آیا یک مقدار در درخواست وجود دارد و یک رشته خالی نیست، می توانید از 
    filled
    
        روش استفاده کنید:
    
if ($request->filled('name')) {    // ...}
    
        اگر هر یک از مقادیر مشخص شده یک رشته خالی نباشد، 
        متد 
    anyFilled
    
        برمی گردد :
    true
    
if ($request->anyFilled(['name', 'email'])) {    // ...}
    whenFilled
    
        اگر مقداری در درخواست وجود داشته باشد و یک رشته خالی نباشد، 
        این روش بسته شدن داده شده را اجرا می کند:
    
$request->whenFilled('name', function (string $input) {    // ...});
    
        بسته شدن دوم ممکن است به 
    whenFilled
    
        روشی منتقل شود که اگر مقدار مشخص شده "پر نشده" باشد اجرا می شود:
    
$request->whenFilled('name', function (string $input) {    // The "name" value is filled...}, function () {    // The "name" value is not filled...});
    
        برای تعیین اینکه آیا کلید داده شده در درخواست وجود ندارد، می توانید از روش های 
    missing
    
        و استفاده کنید 
    whenMissing
    
        :
    
if ($request->missing('name')) {    // ...} $request->whenMissing('name', function (array $input) {    // The "name" value is missing...}, function () {    // The "name" value is present...});ادغام ورودی اضافی
    
        گاهی اوقات ممکن است لازم باشد ورودی های اضافی را به صورت دستی در داده های ورودی موجود درخواست ادغام کنید. برای انجام این کار، می توانید از 
    merge
    
        روش استفاده کنید. اگر یک کلید ورودی داده شده از قبل در درخواست وجود داشته باشد، توسط داده های ارائه شده به روش بازنویسی می شود 
    merge
    
        :
    
$request->merge(['votes' => 0]);
    mergeIfMissing
    
        اگر کلیدهای مربوطه از قبل در داده های ورودی درخواست وجود نداشته باشند، ممکن است از 
        این روش برای ادغام ورودی در درخواست استفاده شود:
    
$request->mergeIfMissing(['votes' => 0]);ورودی قدیمی
لاراول به شما اجازه می دهد تا ورودی یک درخواست را در طول درخواست بعدی حفظ کنید. این ویژگی به ویژه برای پر کردن مجدد فرم ها پس از شناسایی خطاهای اعتبارسنجی مفید است. با این حال، اگر از ویژگیهای اعتبارسنجی لاراول استفاده میکنید ، این امکان وجود دارد که نیازی به استفاده دستی از این روشهای چشمک زن ورودی جلسه به طور مستقیم نداشته باشید، زیرا برخی از امکانات اعتبارسنجی داخلی لاراول آنها را به طور خودکار فراخوانی میکنند.
فلش ورودی به Session
    
        متد 
    flash
    
        موجود در 
    Illuminate\Http\Request
    
        کلاس ورودی فعلی را به 
    
        
            جلسه
        
    
    
         فلش می کند تا در هنگام درخواست بعدی کاربر از برنامه در دسترس باشد:
    
$request->flash();
    
        همچنین میتوانید از روشهای 
    flashOnly
    
        و 
    flashExcept
    
        برای فلش کردن زیرمجموعهای از دادههای درخواست در جلسه استفاده کنید. این روش ها برای دور نگه داشتن اطلاعات حساس مانند رمزهای عبور از جلسه مفید هستند:
    
$request->flashOnly(['username', 'email']); $request->flashExcept('password');ورودی فلش و سپس تغییر مسیر
    
        از آنجایی که اغلب می خواهید ورودی را به جلسه فلش کنید و سپس به صفحه قبلی هدایت کنید، می توانید به راحتی با استفاده از روش زیر، ورودی زنجیره ای را روی یک تغییر مسیر چشمک زن کنید 
    withInput
    
        :
    
return redirect('form')->withInput(); return redirect()->route('user.create')->withInput(); return redirect('form')->withInput(    $request->except('password'));بازیابی ورودی قدیمی
    
        برای بازیابی ورودی فلش شده از درخواست قبلی، متد را 
    old
    
        در یک نمونه از 
    Illuminate\Http\Request
    
        . این 
    old
    
        روش داده های ورودی فلش شده قبلی را از 
    
        
            جلسه
        
    
    
         خارج می کند :
    
$username = $request->old('username');
    
        لاراول همچنین یک کمک کننده جهانی ارائه می دهد 
    old
    
        . اگر ورودی قدیمی را در 
    
        
            قالب Blade
        
    
    
         نمایش می دهید ، استفاده از 
    old
    
        کمک کننده برای پر کردن مجدد فرم 
        راحت تر است . 
        اگر ورودی قدیمی برای فیلد داده شده وجود نداشته باشد، 
    null
    
        برگردانده می شود:
    
<input type="text" name="username" value="{{ old('username') }}">بیسکویت ها
بازیابی کوکی ها از درخواست ها
    
        تمام کوکی های ایجاد شده توسط فریم ورک لاراول رمزگذاری شده و با یک کد احراز هویت امضا می شوند، به این معنی که اگر توسط مشتری تغییر داده شده باشند، نامعتبر تلقی می شوند. برای بازیابی مقدار کوکی از درخواست، 
    cookie
    
        از روش یک 
    Illuminate\Http\Request
    
        نمونه استفاده کنید:
    
$value = $request->cookie('name');برش ورودی و عادی سازی
    
        به طور پیش فرض، لاراول شامل میان افزار 
    Illuminate\Foundation\Http\Middleware\TrimStrings
    
        و 
    Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull
    
        میان افزار در پشته میان افزار جهانی برنامه شما می شود. این میانافزار بهطور خودکار تمام فیلدهای رشته ورودی در درخواست را برش میدهد، و همچنین هر فیلد رشته خالی را به 
    null
    
        . این به شما امکان می دهد نگران این نگرانی های عادی سازی در مسیرها و کنترلرهای خود نباشید.
    
غیرفعال کردن عادی سازی ورودی
    
        اگر میخواهید این رفتار را برای همه درخواستها غیرفعال کنید، میتوانید با فراخوانی روش موجود 
    $middleware->remove
    
        در 
    bootstrap/app.php
    
        فایل برنامه، دو میانافزار را از پشته میانافزار برنامهتان حذف کنید:
    
use Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull;use Illuminate\Foundation\Http\Middleware\TrimStrings; ->withMiddleware(function (Middleware $middleware) {    $middleware->remove([        ConvertEmptyStringsToNull::class,        TrimStrings::class,    ]);})
    
        اگر میخواهید برش رشته و تبدیل رشته خالی را برای زیرمجموعهای از درخواستهای برنامه خود غیرفعال کنید، میتوانید از روشهای میانافزار 
    trimStrings
    
        و 
    convertEmptyStringsToNull
    
        میانافزار در فایل برنامه خود استفاده کنید 
    bootstrap/app.php
    
        . هر دو روش آرایه ای از بسته شدن را می پذیرند، که باید برگردند 
    true
    
        یا 
    false
    
        نشان دهند که آیا عادی سازی ورودی باید نادیده گرفته شود:
    
->withMiddleware(function (Middleware $middleware) {    $middleware->convertEmptyStringsToNull(except: [        fn (Request $request) => $request->is('admin/*'),    ]);     $middleware->trimStrings(except: [        fn (Request $request) => $request->is('admin/*'),    ]);})فایل ها
بازیابی فایل های آپلود شده
    
        می توانید فایل های آپلود شده را 
    Illuminate\Http\Request
    
        با استفاده از روش یا با استفاده از ویژگی های پویا از یک نمونه بازیابی کنید 
    file
    
        . متد 
    file
    
        نمونه ای از 
    Illuminate\Http\UploadedFile
    
        کلاس را برمی گرداند که 
    SplFileInfo
    
        کلاس PHP را گسترش می دهد و روش های مختلفی را برای تعامل با فایل ارائه می دهد:
    
$file = $request->file('photo'); $file = $request->photo;
    
        شما می توانید با استفاده از روش زیر تعیین کنید که آیا فایلی در درخواست وجود دارد یا خیر 
    hasFile
    
        :
    
if ($request->hasFile('photo')) {    // ...}اعتبارسنجی آپلودهای موفق
    
        علاوه بر بررسی اینکه آیا فایل موجود است، میتوانید بررسی کنید که مشکلی برای آپلود فایل از طریق 
    isValid
    
        روش زیر وجود نداشته باشد:
    
if ($request->file('photo')->isValid()) {    // ...}مسیرهای فایل و پسوندها
    
        کلاس 
    UploadedFile
    
        همچنین حاوی متدهایی برای دسترسی به مسیر کاملاً واجد شرایط فایل و پسوند آن است. این 
    extension
    
        روش سعی می کند پسوند فایل را بر اساس محتویات آن حدس بزند. این برنامه افزودنی ممکن است با برنامه افزودنی ارائه شده توسط مشتری متفاوت باشد:
    
$path = $request->photo->path(); $extension = $request->photo->extension();سایر روش های فایل
    
        روشهای متنوع دیگری نیز برای 
    UploadedFile
    
        نمونهها وجود دارد. 
        برای اطلاعات بیشتر در مورد این روش ها، 
    
        
            اسناد API کلاس را
        
    
    
         بررسی کنید .
    
ذخیره سازی فایل های آپلود شده
    
        
            برای ذخیره یک فایل آپلود شده، معمولاً از یکی از سیستم های فایل
        
    
    
         پیکربندی شده خود استفاده می کنید 
        . کلاس روشی 
    UploadedFile
    
        دارد 
    store
    
        که یک فایل آپلود شده را به یکی از دیسک های شما منتقل می کند، که ممکن است مکانی در سیستم فایل محلی شما یا یک مکان ذخیره سازی ابری مانند Amazon S3 باشد.
    
    
        این 
    store
    
        روش مسیری را میپذیرد که فایل باید نسبت به دایرکتوری ریشه پیکربندیشده سیستم فایل ذخیره شود. این مسیر نباید حاوی نام فایل باشد، زیرا یک شناسه منحصربفرد به طور خودکار برای خدمت به عنوان نام فایل ایجاد می شود.
    
    
        این 
    store
    
        متد همچنین آرگومان دوم اختیاری را برای نام دیسک می پذیرد که باید برای ذخیره فایل استفاده شود. این روش مسیر فایل را نسبت به ریشه دیسک برمی گرداند:
    
$path = $request->photo->store('images'); $path = $request->photo->store('images', 's3');
    
        اگر نمی خواهید نام فایل به طور خودکار تولید شود، می توانید از روشی استفاده کنید 
    storeAs
    
        که مسیر، نام فایل و نام دیسک را به عنوان آرگومان های خود می پذیرد:
    
$path = $request->photo->storeAs('images', 'filename.jpg'); $path = $request->photo->storeAs('images', 'filename.jpg', 's3');پیکربندی پراکسی های مورد اعتماد
    
        هنگامی که برنامه های خود را پشت یک متعادل کننده بار اجرا می کنید که گواهی های TLS / SSL را خاتمه می دهد، ممکن است متوجه شوید که برنامه شما گاهی اوقات هنگام استفاده از کمک کننده، پیوندهای HTTPS ایجاد نمی کند 
    url
    
        . معمولاً این به این دلیل است که برنامه شما در حال ارسال ترافیک از بار متعادل کننده شما در پورت 80 است و نمی داند که باید پیوندهای امن ایجاد کند.
    
    
        برای حل این مشکل، میتوانید 
    Illuminate\Http\Middleware\TrustProxies
    
        میانافزاری را که در برنامه لاراول شما گنجانده شده است، فعال کنید، که به شما امکان میدهد به سرعت بار متعادلکنندهها یا پراکسیهایی را که باید مورد اعتماد برنامه شما باشند، سفارشی کنید. پراکسی های مورد اعتماد شما باید با استفاده از 
    trustProxies
    
        روش میان افزار در فایل برنامه شما 
        مشخص شوند 
    bootstrap/app.php
    
        :
    
->withMiddleware(function (Middleware $middleware) {    $middleware->trustProxies(at: [        '192.168.1.1',        '192.168.1.2',    ]);})علاوه بر پیکربندی پراکسیهای مورد اعتماد، میتوانید سربرگهای پراکسیهایی را که باید قابل اعتماد باشند نیز پیکربندی کنید:
->withMiddleware(function (Middleware $middleware) {    $middleware->trustProxies(headers: Request::HEADER_X_FORWARDED_FOR |        Request::HEADER_X_FORWARDED_HOST |        Request::HEADER_X_FORWARDED_PORT |        Request::HEADER_X_FORWARDED_PROTO |        Request::HEADER_X_FORWARDED_AWS_ELB    );})اگر از AWS Elastic Load Balancing استفاده می کنید،
headersمقدار شما باید باشدRequest::HEADER_X_FORWARDED_AWS_ELB. برای اطلاعات بیشتر در مورد ثابت هایی که ممکن است در مقدار استفاده شوندheaders، اسناد Symfony را در مورد پراکسی های قابل اعتماد بررسی کنید .
اعتماد به همه پروکسی ها
    
        اگر از Amazon AWS یا یکی دیگر از ارائه دهندگان متعادل کننده بار «ابر» استفاده می کنید، ممکن است آدرس IP متعادل کننده های واقعی خود را ندانید. در این مورد، می توانید 
    *
    
        برای اعتماد به همه پراکسی ها استفاده کنید:
    
->withMiddleware(function (Middleware $middleware) {    $middleware->trustProxies(at: '*');})پیکربندی هاست های مورد اعتماد
    
        به طور پیش فرض، لاراول بدون توجه به محتوای 
    Host
    
        هدر درخواست HTTP به تمام درخواست هایی که دریافت می کند پاسخ می دهد. علاوه بر این، 
    Host
    
        هنگام ایجاد URL های مطلق برای برنامه شما در طول یک درخواست وب، از مقدار هدر استفاده می شود.
    
    
        به طور معمول، شما باید وب سرور خود را مانند Nginx یا Apache پیکربندی کنید تا فقط درخواست هایی را به برنامه شما ارسال کند که با نام میزبان مشخص شده مطابقت دارند. با این حال، اگر توانایی سفارشی کردن وب سرور خود را به طور مستقیم ندارید و باید به لاراول دستور دهید که فقط به نام های میزبان خاصی پاسخ دهد، می توانید این کار را با فعال کردن میان 
    Illuminate\Http\Middleware\TrustHosts
    
        افزار برای برنامه خود انجام دهید.
    
    
        برای فعال کردن 
    TrustHosts
    
        میانافزار، باید 
    trustHosts
    
        متد میانافزار را در فایل برنامه خود فراخوانی کنید 
    bootstrap/app.php
    
        . با استفاده از 
    at
    
        آرگومان این متد، می توانید نام میزبان هایی را که برنامه شما باید به آنها پاسخ دهد را مشخص کنید. درخواست های دریافتی با 
    Host
    
        سرفصل های دیگر رد می شود:
    
->withMiddleware(function (Middleware $middleware) {    $middleware->trustHosts(at: ['laravel.test']);})
    
        بهطور پیشفرض، درخواستهایی که از زیر دامنههای URL برنامه میآیند نیز بهطور خودکار مورد اعتماد هستند. اگر می خواهید این رفتار را غیرفعال کنید، می توانید از 
    subdomains
    
        آرگومان استفاده کنید:
    
->withMiddleware(function (Middleware $middleware) {    $middleware->trustHosts(at: ['laravel.test'], subdomains: false);})