bertanya
- Data lama
- Kuki
- Fail
Terima fail yang dimuat naik- Simpan fail yang dimuat naik
- konfigurasi proksi
- Terima permintaan Untuk mendapatkan contoh permintaan HTTP semasa melalui suntikan kebergantungan, anda harus memperkenalkan kelas
IlluminateHttpRequest
pada pengawal, dan tika permintaan masuk akan disuntik secara automatik oleh bekas perkhidmatan:<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller{ /** * 存储一个新用户。 * * @param Request $request * @return Response */ public function store(Request $request) { $name = $request->input('name'); // } }
< div name=" d83a24" data-unique="d83a24"> Suntikan Kebergantungan & Parameter Laluan
Jika pengawal anda perlu mendapatkan data daripada parameter laluan, anda harus memasukkannya selepas parameter kebergantungan yang lain. Sebagai contoh, laluan anda ditakrifkan seperti ini:Route::put('user/{id}', 'UserController@update');
Anda boleh menentukan pengawal melalui kaedah berikut, gunakan kelas <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller{ /** * 更新指定用户 * * @param Request $request * @param string $id * @return Response */ public function update(Request $request, $id) { // } }
Dapatkan parameter melalui penghalaan penutupan
Anda juga boleh menggunakanIlluminateHttpRequest
dalam kelas penutupan penghalaan, bekas perkhidmatan akan secara automatik menyuntik parameter permintaan ke dalam penutupan penghalaan:use Illuminate\Http\Request; Route::get('/', function (Request $request) { // });
Minta laluan & kaedah
IlluminateHttpRequest
menyediakan satu siri kaedah untuk mengesahkan parameter permintaan HTTP dan mewarisi kelasSymfonyComponentHttpFoundationRequest
. Berikut adalah beberapa kaedah penting kelas ini:Dapatkan laluan permintaan
Kaedah
laluan mengembalikan maklumat laluan yang diminta. Jadi, jika laluan yang diminta ialah http://domain.com/foo/bar
, kaedahpath
akan mengembalikanfoo/bar
:path
方法返回请求的路径信息。所以,如果请求的路径是http://domain.com/foo/bar
,path
方法将会返回foo/bar
:$uri = $request->path();
is
可以验证传入的请求路径是否与给定的模式匹配。 在这个方法中,你也可以使用*
字符作为通配符:if ($request->is('admin/*')) { // }
获取请求 URL
可以使用
url
或fullUrl
方法获取完整的请求 URL。url
方法返回不含有查询串的 URL,fullUrl
获取包含查询串的 URL:// 不附带查询串... $url = $request->url(); // 附带查询串... $url = $request->fullUrl();
获取请求 Method
method
方法返回请求的 HTTP 动作。还可以使用isMethod
方法校验 HTTP 动作是否与给定的客串上匹配:$method = $request->method();if ($request->isMethod('post')) { // }
PSR-7 请求
PSR-7 standard 定义了 HTTP 消息接口,包括 请求 和 响应。如果你想用 PSR-7 请求代替 Laravel 请求,需要先安装几个库。 Laravel 使用 Symfony HTTP Message Bridge 组件将典型的 Laravel 请求 和 响应 转换为 PSR-7 兼容实现:
composer require symfony/psr-http-message-bridge composer require zendframework/zend-diactoros
一旦安装了这些库,就可以通过在路由闭包或控制器方法中的请求接口类型提示来获取 PSR-7 请求:
use Psr\Http\Message\ServerRequestInterface; Route::get('/', function (ServerRequestInterface $request) { // });
{tip} 如果从路由或控制器返回 PSR-7 响应实例,框架会自动将其转换回 Laravel 响应实例并显示。
输入的裁剪和标准化
默认情况下,Laravel 在应用的全局中间件堆栈中包含了
TrimStrings
和ConvertEmptyStringsToNull
中间件。这些中间件被放在AppHttpKernel
类的堆栈列表中。它们自动裁剪请求中的所有输入字符串域,同时将空字符串域转换为null
。这样一来,你就不必担心路由和控制器中的标准化规约问题。如果想要禁用这个行为,只需要通过从
AppHttpKernel
类的$middleware
属性中移除它(相当于从应用的中间件堆栈中移除)。获取输入
获取所有的输入数据
可以使用
all
$input = $request->all();
is
boleh mengesahkan sama ada laluan permintaan masuk sepadan dengan corak yang diberikan. Dalam kaedah ini, anda juga boleh menggunakan aksara* sebagai kad bebas: $name = $request->input('name');
🎜Dapatkan URL permintaan🎜🎜Anda boleh menggunakankaedah url atau fullUrl
untuk mendapatkan URL permintaan lengkap. Kaedahurl
mengembalikan URL yang tidak mengandungi rentetan pertanyaan danfullUrl
memperoleh URL yang mengandungi rentetan pertanyaan: 🎜$name = $request->input('name', 'Sally');
🎜 🎜Get request Method🎜🎜kaedah kaedah mengembalikan tindakan HTTP yang diminta. Anda juga boleh menggunakan kaedah isMethod
untuk mengesahkan bahawa tindakan HTTP sepadan dengan tetamu yang diberikan: 🎜$name = $request->input('products.0.name'); $names = $request->input('products.*.name');
🎜🎜🎜Permintaan PSR-7
🎜Piawaian PSR-7 mentakrifkan antara muka mesej HTTP, termasuk permintaan dan respons. Jika anda ingin menggunakan permintaan PSR-7 dan bukannya permintaan Laravel, anda perlu memasang beberapa perpustakaan terlebih dahulu. Laravel menggunakan komponen Symfony HTTP Message Bridge untuk menukar permintaan dan respons Laravel biasa kepada pelaksanaan yang mematuhi PSR-7: 🎜$input = $request->input();
🎜Setelah pustaka ini dipasang, ia boleh dihantar dalam penutupan laluan atau kaedah pengawal Permintaan petua jenis antara muka untuk mendapatkan permintaan PSR-7: 🎜$name = $request->query('name');
🎜{tip} Jika tika tindak balas PSR-7 dikembalikan daripada laluan atau pengawal, rangka kerja akan menukarnya semula kepada tika tindak balas Laravel secara automatik dan memaparkannya . 🎜
🎜🎜🎜Input pemangkasan dan normalisasi< / h2>🎜Secara lalai, Laravel menyertakan perisian tengah
TrimStrings
danConvertEmptyStringsToNull
dalam tindanan perisian tengah global aplikasi. Perisian tengah ini diletakkan dalam senarai tindanan kelasAppHttpKernel
. Mereka secara automatik memangkas semua medan rentetan input dalam permintaan, sambil menukar medan rentetan kosong kepadanull
. Dengan cara ini anda tidak perlu risau tentang konvensyen piawai dalam penghalaan dan pengawal. 🎜🎜Jika anda ingin melumpuhkan tingkah laku ini, cuma alih keluarnya daripada atribut$middleware
kelasAppHttpKernel
(bersamaan dengan mengalih keluarnya daripada timbunan middleware aplikasi) . 🎜🎜🎜🎜Mendapatkan input
🎜🎜Dapatkan semua data input🎜🎜Anda boleh menggunakan kaedahsemua untuk mendapatkan semua tatasusunan data input: 🎜 $name = $request->query('name', 'Helen');
🎜🎜Dapatkan nilai input tunggal
Menggunakan beberapa kaedah mudah, anda boleh mendapatkan semua input pengguna melalui contoh
IlluminateHttpRequest
, tanpa perlu risau tentang tindakan HTTP yang diminta pengguna. Tanpa mengira tindakan HTTP, permintaan pengguna boleh diperoleh melalui kaedahinput
:IlluminateHttpRequest
实例获取用户的全部输入,不需要担心用户请求用的是哪种 HTTP 动作。无论哪种 HTTP 动作, 用户的请求都能被input
方法获取:$query = $request->query();
可以将默认值作为传递给
input
方法的第二个参数。这个值将在请求没有包含该参数时被返回:$name = $request->name;
当与包含数组输入的表单协作时,使用 「点」 运算符访问数组元素:
$name = $request->input('user.name');
不带参数调用
input
方法,能够获取全部输入值(关联数组形式):$input = $request->only(['username', 'password']); $input = $request->only('username', 'password'); $input = $request->except(['credit_card']); $input = $request->except('credit_card');
从查询串中获取输入
input
方法从整个请求载体中获取值(包括查询串),query
方法则仅从查询串中获取值:if ($request->has('name')) { // }
如果查询串值不存在,
query
方法的第二个参数将被作为该参数的默认值被返回:if ($request->has(['name', 'email'])) { // }
不带参数调用
query
方法,能够获取查询串的所有值(关联数组形式):if ($request->filled('name')) { // }
通过动态属性获取输入
可以通过
IlluminateHttpRequest
实例的动态属性访问用户输入。例如,如果应用表单包含name
域,可以像下面这样访问该域的值:$request->flash();
在使用动态属性时,Laravel 首先会在请求载体中查找参数的值。如果该值不存在,Lavarel 将在路由参数中搜索。
获取 JSON 输入
当向应用传递 JSON 请求时,可以通过
input
方法访问 JSON 数据,只要将请求的Content-Type
头设置为application/json
。 同样可以使用 「点」语法访问 JSON 数组:$request->flashOnly(['username', 'email']);$request->flashExcept('password');
获取部分输入数据
如果需要获取输入数据的子集,可以使用
only
或except
方法。它们接受单个array
或者动态参数列表:return redirect('form')->withInput(); return redirect('form')->withInput( $request->except('password') );
{tip}
only
方法返回请求中的全部键值对;但是它不返回请求中不存在的键值对。判断输入值是否存在
has
方法用于判定请求中是否存在指定的值。如果请求中存在该值,has
方法返回true
:$username = $request->old('username');
如果给出一个数组,
has
方法将判断在请求中,指定的值是否全部存在:<input type="text" name="username" value="{{ old('username') }}">
如果想要判断一个值在请求中是否存在,并且不为空,需要使用
filled
$value = $request->cookie('name');
Anda boleh menghantar nilai lalai sebagai parameter kedua kepada kaedahinput
. Nilai ini akan dikembalikan apabila permintaan tidak termasuk parameter ini:$value = Cookie::get('name');
Apabila bekerja dengan borang yang mengandungi input tatasusunan, gunakan operator "titik" untuk mengakses elemen tatasusunan:return response('Hello World')->cookie( 'name','value',$minutes );
Panggilinput Kaedah untuk mendapatkan semua nilai input (dalam bentuk tatasusunan bersekutu):return response('Hello World')->cookie( 'name', 'value', $minutes, $path, $domain, $secure, $httpOnly );
🎜Dapatkan input daripada rentetan pertanyaan🎜🎜input kod> kaedah Dapatkan nilai daripada keseluruhan vektor permintaan (termasuk rentetan pertanyaan), kaedah pertanyaan hanya mendapat nilai daripada rentetan pertanyaan: 🎜 Cookie::queue(Cookie::make('name', 'value', $minutes)); Cookie::queue('name', 'value', $minutes);
🎜Jika nilai rentetan pertanyaan tidak wujud, Kaedahquery
Parameter kedua akan dikembalikan sebagai nilai lalai parameter: 🎜$cookie = cookie('name', 'value', $minutes); return response('Hello World')->cookie($cookie);
🎜Panggil kaedahquery
tanpa parameter untuk mendapatkan semua nilai rentetan pertanyaan (dalam bentuk tatasusunan bersekutu): 🎜$file = $request->file('photo'); $file = $request->photo;
🎜🎜Mendapatkan input melalui sifat dinamik🎜🎜Input pengguna boleh diakses melalui sifat dinamikContoh IlluminateHttpRequest. Contohnya, jika borang permohonan anda mengandungi medan nama, anda boleh mengakses nilai medan tersebut seperti ini: 🎜 if ($request->hasFile('photo')) { // }
🎜Apabila menggunakan sifat dinamik, Laravel mula-mula mencari nilai parameter dalam permintaan badan. Jika nilai tidak wujud, Lavarel akan mencari dalam parameter laluan. 🎜🎜🎜Dapatkan input JSON🎜🎜Apabila menghantar permintaan JSON kepada aplikasi, anda boleh mengakses data JSON melalui kaedahinput
, selagi yang diminta PengepalaContent-Type
ditetapkan kepadaapplication/json
. Anda juga boleh menggunakan sintaks "titik" untuk mengakses tatasusunan JSON: 🎜if ($request->file('photo')->isValid()) { // }
🎜🎜Dapatkan sebahagian daripada data input🎜🎜Jika anda perlu mendapatkan subset input data, anda boleh menggunakan kaedahsahaja
ataukecuali
. Mereka menerima satuarray
atau senarai parameter dinamik: 🎜$path = $request->photo->path(); $extension = $request->photo->extension();
🎜{tip} Kaedah
only
mengembalikan semua pasangan nilai kunci dalam permintaan itu; tidak mengembalikan sebarang pasangan nilai kunci dalam permintaan pasangan nilai kunci sedia ada. 🎜🎜🎜Tentukan sama ada nilai input wujud🎜🎜 kaedahhas
digunakan untuk menentukan sama ada nilai yang ditentukan wujud dalam permintaan. Jika nilai wujud dalam permintaan, kaedahhas
mengembalikantrue
: 🎜$path = $request->photo->store('images'); $path = $request->photo->store('images', 's3');
🎜Jika tatasusunan diberikan, kaedahhas
akan menentukan bahawa dalam permintaan, Sama ada semua nilai yang dinyatakan wujud: 🎜$path = $request->photo->storeAs('images', 'filename.jpg'); $path = $request->photo->storeAs('images', 'filename.jpg', 's3');
🎜 Jika anda ingin menentukan sama ada nilai wujud dalam permintaan dan tidak kosong, anda perlu menggunakan kaedahfilled
: 🎜<?php namespace App\Http\Middleware; use Illuminate\Http\Request; use Fideloper\Proxy\TrustProxies as Middleware; class TrustProxies extends Middleware{ /** * 应用程序的可信代理列表 * * @var array */ protected $proxies = [ '192.168.1.1', '192.168.1.2', ]; /** * 应该用来检测代理的头信息 * * @var string */ protected $headers = Request::HEADER_X_FORWARDED_ALL;}
🎜🎜🎜🎜🎜🎜Data Lama
Laravel membolehkan anda mengekalkan data antara permintaan. Ciri ini berguna apabila mengisi semula borang selepas ralat pengesahan. Walau bagaimanapun, jika anda menggunakan ciri pengesahan terbina dalam Lavarel, anda tidak perlu memanggil kaedah ini secara manual kerana beberapa ciri pengesahan terbina dalam Laravel akan memanggilnya secara automatik.
Hantar data input ke Sesi
Kaedah
flash
kelasIlluminateHttpRequest
akan memindahkan input semasa ke sesi, dan ia akan dihantar apabila pengguna membuat permintaan ini kepada aplikasi Masih tersedia:IlluminateHttpRequest
类的flash
方法将把当前的输入传送到 session ,在用户向应用发出这一次请求时它们仍然可用:/** * 应用程序的可信代理列表 * * @var array */ protected $proxies = '*';
可以使用
rrreeeflashOnly
或flashExcept
方法将请求数据的子集传送给 session。这些方法常用于将密码之类的敏感数据排除在 session 保持之外:传送数据并跳转
当你经常需要将输入传送至 session 并紧接着跳转至之前的页面,可以通过在跳转函数后链接调用
rrreeewithInput
方法轻易地实现:获取旧数据
要获取前一次请求传送的数据,可以使用
rrreeeRequest
实例的old
方法。old
方法将从 session 拉取之前传送的值:Laravel 还提供了全局的
rrreeeold
助手。如果要在 Blade 模板中 显示旧数据,old
助手更易用。如果给定域的旧值不存在,它将返回null
:Cookies
从请求中获取 Cookies
Lavarel 框架生成的全部 cookies 都是加密的,并且已经用授权码签名,这意味着如果它们被客户端改变就会失效。使用
rrreeeIlluminateHttpRequest
实例的cookie
方法可以从请求中获取 cookie 值:也可以使用
rrreeeCookie
facade 访问 cookie 值:将 Cookies 附加到响应中
可以使用
rrreeecookie
方法向输出的IlluminateHttpResponse
实例附加 cookie。需要传递 名称、值、cookie 的过期时间(以分钟为单位)给该方法:
rrreeecookie
还可以接受另外几个不太常用的参数。通常这些参数和 PHP 内置的 setcookie 方法的参数有着相同的作用和意义:同样,你可以使用
Anda boleh menggunakan kaedahCookie
facade 来 「排列」 用于从应用中附加到输出响应的 cookies。queue
方法接受一个Cookie
实例或者用于创建Cookie
rrreeeflashOnly
atauflashExcept
untuk menghantar subset data yang diminta kepada sesi. Kaedah ini sering digunakan untuk mengecualikan data sensitif seperti kata laluan daripada kegigihan sesi:rrreee🎜Pindahkan data dan lompat🎜🎜Apabila anda sering perlu memasukkan Memindahkan ke sesi dan kemudian melompat ke halaman sebelumnya boleh dicapai dengan mudah dengan memanggil kaedahwithInput
selepas fungsi lompat: 🎜rrreee🎜🎜Menjadi tua data🎜🎜Untuk mendapatkan data yang dihantar melalui permintaan sebelumnya, anda boleh menggunakan kaedahlama
contohPermintaan
. Kaedahlama
akan menarik nilai yang dihantar sebelum ini daripada sesi: 🎜rrreee🎜Laravel juga menyediakan pembantulama
global. Jika anda ingin memaparkan data lama dalam templat Blade, pembantulama
lebih mudah digunakan. Jika nilai lama untuk domain yang diberikan tidak wujud, ia akan mengembalikannull
: 🎜rrreee🎜🎜🎜🎜Kuki🎜🎜🎜Dapatkan Kuki daripada permintaan🎜🎜Semua kuki yang dijana oleh rangka kerja Lavarel disulitkan dan ditandatangani dengan kod kebenaran ini Bermakna ia akan menjadi tidak sah jika diubah oleh pelanggan. Gunakan kaedahcookie
contohIlluminateHttpRequest
untuk mendapatkan nilai kuki daripada permintaan: 🎜rrreee🎜 Anda juga boleh menggunakan fasadCookie
untuk mengakses nilai kuki: 🎜rrreee< div name="c52fe2" data-unique="c52fe2">🎜🎜Lampirkan Kuki pada respons🎜🎜Anda boleh menggunakan kaedahkuki untuk melampirkan kuki pada output < kod>IlluminateHttpResponse contoh. Anda perlu menghantar nama, nilai dan masa tamat tempoh kuki (dalam minit) kepada kaedah ini: 🎜rrreee🎜 kuki juga boleh menerima beberapa parameter lain yang kurang biasa digunakan. Biasanya parameter ini mempunyai kesan dan makna yang sama seperti parameter kaedah setcookie terbina dalam PHP: 🎜rrreee🎜 Begitu juga, anda boleh menggunakan fasad Cookie
untuk "mengatur" kuki untuk dilampirkan pada respons output daripada permohonan itu. Kaedahqueue
menerima contohCookie
atau senarai parameter yang diperlukan untuk membuatCookie
. Kuki ini akan dilampirkan pada respons output sebelum dihantar ke penyemak imbas: 🎜rrreee🎜🎜Menjana Kejadian Kuki
Jika anda ingin menjana tika
rrreeeSymfonyComponentHttpFoundationCookie
yang kemudiannya boleh diberikan kepada tika respons, anda boleh menggunakan pembantukuki
global. Kuki ini tidak akan dihantar kembali kepada pelanggan tanpa dilampirkan pada contoh respons:SymfonyComponentHttpFoundationCookie
实例,可以使用全局的cookie
助手。这个 cookie 在没有附加到响应实例前不会传回客户端:文件
获取上传的文件
可以使用
rrreeeIlluminateHttpRequest
实例的file
方法或者动态属性访问上传文件。file
方法返回IlluminateHttpUploadedFile
类的实例,这个类扩展自 PHP 的SplFileInfo
类并提供用于文件交互的多个方法:可以使用
rrreeehasFile
方法判断请求中是否存在指定文件:验证成功上传
除了验证文件是否存在,还可以使用
rrreeeisValid
方法校验上传的文件有没有问题:文件路径 & 扩展名
rrreeeUploadedFile
类还包含访问文件的全路径和扩展名的方法。extension
方法基于文件的内容猜测匹配的文件扩展名。这个扩展名有可能和客户端提供的扩展名不同:其它的文件方法
UploadedFile
实例还有另外几个方法可用。浏览 这个类的 API 文档 可以获取这些方法的更多信息。存储上传文件
要存储上传的文件,先配置好 文件系统。你可以使用
UploadedFile
的store
方法把上传文件移动到你的某个磁盘上,该文件可能是本地文件系统中的一个位置,甚至像 Amazon S3 这样的云存储位置。store
方法接受相对于文件系统配置的存储文件根目录的路径。这个路径不能包含文件名,因为系统会自动生成唯一的 ID 作为文件名。
rrreeestore
方法还接受可选的第二个参数,用于存储文件的磁盘名称。这个方法会返回相对于磁盘根目录的文件路径:如果你不想自动生成文件名,那么可以使用
storeAs
rrreee
IlluminateHttpRequest
untuk mendapatkan parameter laluan anda id
: