HTTP Requests

دسترسی به یک نمونه از درخواست

با استفاده از فاساد

فاساد Request امکان دسترسی به درخواست فعلی که به کانتینر آن وابسته است را ایجاد میکند. برای مثال:

$name = Request::input('name');

به یاد داشته باشید، در صورتی که در یک فضای نام هستید، باید فاساد Request را با استفاده از عبارت ;use Request در بالای فایل کلاس ایمپورت نمایید.

با استفاده از تزریق وابستگی - Dependency Injection (DI)

برای به دست آورد نمونه ای از درخواست HTTP با استفاده از DI، باید کلاس را بر روی سازنده کلاس یا متد مورد نظر تایپ_هینت کنید. نمونه درخواست فعلی خودکار توسط service container تزریق خواهد شد:

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class UserController extends Controller {

    /**
     * Store a new user.
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $name = $request->input('name');

        //
    }

}

در صورتی که متد کنترلر منتظر ورودی از پارامتر روت باشد، به سادگی میتوانید آرگومانهای روت را پس از دیگر وابستگی ها لیست نمایید:

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class UserController extends Controller {

    /**
     * Update the specified user.
     *
     * @param  Request  $request
     * @param  int  $id
     * @return Response
     */
    public function update(Request $request, $id)
    {
        //
    }

}

گرفتن ورودی

گرفتن یک مقدار ورودی

با استفاده از چند متد ساده، میتوانید تمامی به ورودیهای کاربران در نمونه Illuminate\Http\Request دسترسی داشته باشید. از آنجا که تمامی ورودیها برای تمامی متدهای درخواست به یک شکل مورد دسترس قرار میگیرند، نیازی نیست نگران متد درخواست HTTP استفاده شده باشید.

$name = Request::input('name');

گرفتن یک مقدار پیش فرض درصورتی که مقدار ورودی ارائه نشده باش

$name = Request::input('name', 'Sally');

بررسی ارئه شدن یک مقدار ورودی

if (Request::has('name'))
{
    //
}

گرفتن تمامی ورودیهای درخواست

$input = Request::all();

گرفتن تنها برخی ورودیهای درخواست

$input = Request::only('username', 'password');

$input = Request::except('credit_card');

وقتی با فرمهایی با ورودیهای "آرایه" ای کار میکنید، میتوانید برای دسترسی به آرایه ها از . (dot notation) استفاده کنید

$input = Request::input('products.0.name');

ورودی های قبلی

لاراول امکان نگهداری ورودیهای یک درخواست، در طول درخواست بعدی را فراهم نموده است. برای مثال، ممکن است نیاز داشته باشید، پس از اعتبارسنجی یک فرم آن را دوباره با مقادیر پیشین پر کنید.

فلش ورودیهای کاربر درون متغیر نشست (session)

متد flash ورودیهای فعلی را درون متغیر نشست قرار میدهد، تا در طول درخواست بعدی کاربر به نرم افزار در دسترس باشد:

Request::flash();

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

Request::flashOnly('username', 'email');

Request::flashExcept('password');

فلش و ردیرکت

از آنجا که اغلب فلش را در زمان ردیرکت به صفحه قبل انجام میدهید، میتوانید به سادگی فلش ورودیها در یک زنجیره عملیات با ردیرکت انجام دهید:

return redirect('form')->withInput();

return redirect('form')->withInput(Request::except('password'));

بازیابی داده های پیشین

برای بازیابی داده های فلش شده از درخواست پیشین، از متد old بر روی نمونه Request استفاده کنید:

$username = Request::old('username');

اگر داده های پیشین را دریک قالب بلید (Blade) نمایش میدهید، بسیار راحتتر است که از تابع کمکی old استفاده نمایید:

{{ old('username') }}

کوکیها

تمامی کوکیهای ایجاد شده توسط فریمورک لاراول با استفاده از یک کد سنجش هویت رمزنگاری و امضا شده اند، به این معنی که در صورت تغییر آنها توسط کلاینت غیر معتبر خواهند بود.

خواندن مقدار کوکی

$value = Request::cookie('name');

پیوست کوکی به یک درخواست جدید

تابع کمکی cookie به عنوان یک سازنده جدید برای ایجاد نمونه های جدید از Symfony\Component\HttpFoundation\Cookie عمل مینماید. کوکیها را میتوان با استفاده از متد withCookie به یک نمونه از Response پیوست کرد:

$response = new Illuminate\Http\Response('Hello World');

$response->withCookie(cookie('name', 'value', $minutes));

ایجاد یک کوکی که تا ابد میماند*

منظور از "ابد" واقعا پنج سال است

$response->withCookie(cookie()->forever('name', 'value'));

قراردادن کوکیها در صف

شما میتوانید کوکی را حتی پیش از آنکه پاسخ ایجاد گردد، به "صف" اضاف نمایید تا پیوست شود:

<?php namespace App\Http\Controllers;

use Cookie;
use Illuminate\Routing\Controller;

class UserController extends Controller
{
    /**
     * Update a resource
     *
     * @return Response
     */
     public function update()
     {
        Cookie::queue('name', 'value');

        return response('Hello World');
     }
}

فایلها

گرفتن یک فایل آپلود شده

$file = Request::file('photo');

بررسی وجود فایل در درخواست

if (Request::hasFile('photo'))
{
    //
}

شی بازگردانده شده توسط متد file نمونه ای از کلاس Symfony\Component\HttpFoundation\File\UploadedFile است، که کلاس SplFileInfo از PHP را اکستند میکند و متدهای بسیاری برای کار با فایلها ارائه مینماید.

بررسی معتبر بودن فایل آپلود شده

if (Request::file('photo')->isValid())
{
    //
}

جابجایی فایل آپلود شده

Request::file('photo')->move($destinationPath);

Request::file('photo')->move($destinationPath, $fileName);

دیگر متدهای فایل

There are a variety of other methods available on UploadedFile instances. Check out the API documentation for the class for more information regarding these methods. متدهای متنوع بسیاری در نمونه های UploadedFile وجود دارند. مستندات API را برای اطلاعات بیشتر این کلاس بررسی نمایید.

دیگر اطلاعات درخواست

The Request class provides many methods for examining the HTTP request for your application and extends the Symfony\Component\HttpFoundation\Request class. Here are some of the highlights. کلاس Request متدهای بسیاری برای بررسی درخواستهای HTTP ارسال شده برای نرم افزار کاربردی وب ارائه مینماید و کلاس Symfony\Component\HttpFoundation\Request را اکستند میکند.

گرفتن URI مروبط به درخواست

$uri = Request::path();

بررسی استفاده از AJAX توسط درخواست

if (Request::ajax())
{
    //
}

گرفتن ممتد درخواست

$method = Request::method();

if (Request::isMethod('post'))
{
    //
}

بررسی همخوانی مسیر درخواست با الگویی مشخص

if (Request::is('admin/*'))
{
    //
}

گرفتن URL درخواست جاری

$url = Request::url();