Açıklama
İstek Objesini Almak
webman, istek nesnesini action yönteminin ilk parametresine otomatik olarak enjekte eder, örneğin
Örnek
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
$default_name = 'webman';
// get isteğinden ad parametresini al, eğer ad parametresi geçilmediyse $default_name'i döndür
$name = $request->get('name', $default_name);
// Tarayıcıya dize döndür
return response('hello ' . $name);
}
}
$request
nesnesi aracılığıyla herhangi bir istekle ilgili herhangi bir veri alabiliriz.
**Bazen başka bir sınıfta mevcut isteğin $request
nesnesini almak istiyoruz, bu durumda sadece yardımcı fonksiyonu request()
kullanmamız yeterlidir.
Get İstek Parametrelerini Almak
Tüm get dizisini al
$request->get();
Eğer istekte get parametresi yoksa boş bir dizi döndürülür.
Get dizisinden bir değer al
$request->get('name');
Eğer get dizisi bu değeri içermiyorsa null döndürülür.
Ayrıca get yöntemine ikinci bir parametre olarak varsayılan bir değer iletebilirsiniz, eğer get dizisi ilgili değeri bulamazsa varsayılan değer döndürülür. Örneğin:
$request->get('name', 'tom');
Post İstek Parametrelerini Almak
Tüm post dizisini al
$request->post();
Eğer istekte post parametresi yoksa boş bir dizi döndürülür.
Post dizisinden bir değer al
$request->post('name');
Eğer post dizisi bu değeri içermiyorsa null döndürülür.
Get yöntemi ile benzer şekilde, ikinci bir parametre olarak post yöntemine varsayılan bir değer iletebilirsiniz. Eğer post dizisi ilgili değeri bulamazsa varsayılan değer döndürülür. Örneğin:
$request->post('name', 'tom');
Raw Post İsteği Almak
$post = $request->rawBody();
Bu işlev php-fpm
içindeki file_get_contents("php://input");
işlemine benzer. HTTP raw istek gövdesini almak için kullanılır. Bu, application/x-www-form-urlencoded
biçiminde olmayan post istek verilerini almak için kullanışlıdır.
Header Almak
Tüm header dizisini al
$request->header();
Eğer istekte header parametresi yoksa boş bir dizi döndürülür. Tüm anahtarlar küçük harfle yazılmıştır.
Header dizisinden bir değer al
$request->header('host');
Eğer header dizisi bu değeri içermiyorsa null döndürülür. Tüm anahtarlar küçük harfle yazılmıştır.
Get yöntemi ile benzer şekilde, ikinci bir parametre olarak header yöntemine varsayılan bir değer iletebilirsiniz. Eğer header dizisi ilgili değeri bulamazsa varsayılan değer döndürülür. Örneğin:
$request->header('host', 'localhost');
Çerez Almak
Tüm çerez dizisini al
$request->cookie();
Eğer istekte çerez parametresi yoksa boş bir dizi döndürülür.
Çerez dizisinden bir değer al
$request->cookie('name');
Eğer çerez dizisi bu değeri içermiyorsa null döndürülür.
Get yöntemi ile benzer şekilde, ikinci bir parametre olarak cookie yöntemine varsayılan bir değer iletebilirsiniz. Eğer cookie dizisi ilgili değeri bulamazsa varsayılan değer döndürülür. Örneğin:
$request->cookie('name', 'tom');
Tüm Girişleri Almak
post
ve get
içeren toplu verileri almak için.
$request->all();
Belirli Bir Giriş Değerini Almak
post
ve get
içinden belirli bir değeri almak için.
$request->input('name', $default_value);
Kısmi Giriş Verilerini Almak
post
ve get
içinden belirli verileri almak için.
// Kullanıcı adı ve şifre'den oluşan bir dizi al, eğer ilgili anahtar bulunmazsa ihmal et
$only = $request->only(['username', 'password']);
// Avatar ve yaş dışındaki tüm girişleri al
$except = $request->except(['avatar', 'age']);
Dosya Yükleme
Tüm yükleme dosyası dizisini alın
$request->file();
Forma benzer:
<form method="post" action="http://127.0.0.1:8787/upload/files" enctype="multipart/form-data" />
<input name="file1" multiple="multiple" type="file">
<input name="file2" multiple="multiple" type="file">
<input type="submit">
</form>
$request->file()
'ın döndürdüğü format şuna benzer:
array (
'file1' => nesne(webman\Http\UploadFile),
'file2' => nesne(webman\Http\UploadFile)
)
Bu, webman\Http\UploadFile
örneklerinin bir dizisidir. webman\Http\UploadFile
sınıfı PHP'nin yerleşik olan SplFileInfo
sınıfını genişleterek bazı pratik yöntemler sunar.
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function files(Request $request)
{
foreach ($request->file() as $key => $spl_file) {
var_export($spl_file->isValid()); // Dosya geçerli mi, örn. true|false
var_export($spl_file->getUploadExtension()); // Yükleme dosyası uzantısı, örn. 'jpg'
var_export($spl_file->getUploadMimeType()); // Yükleme dosyası mime türü, örn. 'image/jpeg'
var_export($spl_file->getUploadErrorCode()); // Yükleme hatası kodunu al, örn. UPLOAD_ERR_NO_TMP_DIR UPLOAD_ERR_NO_FILE UPLOAD_ERR_CANT_WRITE
var_export($spl_file->getUploadName()); // Yükleme dosya adı, örn. 'my-test.jpg'
var_export($spl_file->getSize()); // Dosya boyutunu al, örn. 13364, byte cinsinden
var_export($spl_file->getPath()); // Yüklü dizini al, örn. '/tmp'
var_export($spl_file->getRealPath()); // Geçici dosya yolunu al, örn. `/tmp/workerman.upload.SRliMu`
}
return response('ok');
}
}
Not:
- Dosya yüklendikten sonra geçici bir dosya adı verilir,
/tmp/workerman.upload.SRliMu
gibi - Yükleme dosya boyutu defaultMaxPackageSize kısıtlamasına tabidir, varsayılan olarak 10M'dir,
config/server.php
dosyasındamax_package_size
'ı değiştirerek varsayılan değeri değiştirebilirsiniz. - İstek sona erdiğinde geçici dosya otomatik olarak temizlenir
- Eğer istekte yükleme dosyası yoksa,
$request->file()
boş bir dizi döndürür - Yükleme dosyaları
move_uploaded_file()
yöntemini desteklemez, bunun yerine$file->move()
yöntemini kullanmalısınız, aşağıdaki örneğe bakın
Belirli yükleme dosyasını alın
$request->file('avatar');
Eğer dosya mevcutsa, karşılık gelen webman\Http\UploadFile
örneğini döndürür, aksi takdirde null döndürür.
Örnek
<?php
namespace app\controller;
use support\Request;
class UploadController
{
public function file(Request $request)
{
$file = $request->file('avatar');
if ($file && $file->isValid()) {
$file->move(public_path().'/files/myfile.'.$file->getUploadExtension());
return json(['code' => 0, 'msg' => 'yükleme başarılı']);
}
return json(['code' => 1, 'msg' => 'dosya bulunamadı']);
}
}
Host Bilgisini Al
İsteğin host bilgisini alır.
$request->host();
Eğer isteğin adresi standart olmayan 80 veya 443 portunu içeriyorsa, host bilgisi port ile birlikte olabilir, örneğin example.com:8080
. Eğer port gerekmiyorsa, ilk parametre true
olarak iletilir.
$request->host(true);
İstek Methodunu Al
$request->method();
Döndürülen değer GET
, POST
, PUT
, DELETE
, OPTIONS
, HEAD
değerlerinden biri olabilir.
İstek URI'sini Al
$request->uri();
Path ve queryString bölümlerini içeren isteğin URI'sini döndürür.
İstek Path'ini Al
$request->path();
İstek path'ini döndürür.
İstek QueryString'ini Al
$request->queryString();
İstek query string'ini döndürür.
İstek URL'ini Al
url()
yöntemi, Query
parametre içermeyen URL döndürür.
$request->url();
//www.workerman.net/workerman-chat
gibi bir değer döndürür.
fullUrl()
yöntemi, Query
parametre içeren URL döndürür.
$request->fullUrl();
//www.workerman.net/workerman-chat?type=download
gibi bir değer döndürür.
Not
url()
vefullUrl()
adresin protokol kısmını (http veya https) döndürmez.
Çünkü tarayıcıda//example.com
gibi//
ile başlayan adresler otomatik olarak mevcut sitenin protokolünü algılar ve otomatik olarak http veya https ile istek yapar.
Eğer nginx proxy kullanıyorsanız, nginx konfigürasyonuna proxy_set_header X-Forwarded-Proto $scheme;
ekleyin, nginx proxy referansı,
böylece http
veya https
olup olmadığını belirlemek için $request->header('x-forwarded-proto');
'yu kullanabilirsiniz, örneğin:
echo $request->header('x-forwarded-proto'); // http veya https çıktısını verir
İstek HTTP sürümünü Al
$request->protocolVersion();
String olarak 1.1
veya 1.0
döndürür.
İstek session ID'sini al
$request->sessionId();
Harfler ve rakamlardan oluşan bir dize döndürür
İstek istemci IP'sini al
$request->getRemoteIp();
İstek istemci portunu al
$request->getRemotePort();
İstemci Gerçek IP'sini Almak
$request->getRealIp($safe_mode=true);
Projede bir işaretleme (örneğin nginx) kullanıldığında, $request->getRemoteIp()
kullanılarak genellikle temsilci sunucusu IP'si (örneğin 127.0.0.1
192.168.x.x
) elde edilir, gerçek istemci IP'si değil. Bu durumda, istemci gerçek IP'sini elde etmek için $request->getRealIp()
kullanılabilir.
$request->getRealIp()
, gerçek IP'yi almak için HTTP başlığının x-real-ip
, x-forwarded-for
, client-ip
, x-client-ip
, via
alanlarından almaya çalışacaktır.
HTTP başlıkları kolayca sahte olabileceğinden, bu yöntemle elde edilen istemci IP'si %100 güvenilir değildir, özellikle
$safe_mode
false ise. İstemci gerçek IP'sini bir temsilciden güvenilir bir şekilde almak için, bilinen güvenli bir temsilci sunucusu IP'sini bilmek ve gerçek IP'nin hangi HTTP başlığıyla taşındığını bilmek gereklidir. Eğer$request->getRemoteIp()
dönen IP, bilinen güvenli bir temsilci sunucusunu doğrularsa, o zaman gerçek IP'yi almak için$request->header('gerçek IP'yi içeren HTTP başlığı')
kullanılabilir.
Sunucu IP'sini Alma
$request->getLocalIp();
Sunucu Portunu Alma
$request->getLocalPort();
Ajax İsteği Olup Olmadığını Kontrol Etme
$request->isAjax();
Pjax İsteği Olup Olmadığını Kontrol Etme
$request->isPjax();
JSON Cevabı Bekleniyor mu Kontrol Etme
$request->expectsJson();
İstemcinin JSON Cevabını Kabul Edip Etmeyeceğini Kontrol Etme
$request->acceptJson();
İstek Plugin Adını Alma
Plugin isteği boş dize ''
olarak döner.
$request->plugin;
Bu özellik için webman>=1.4.0 gereklidir
İstek Uygulama Adını Alma
Tek uygulamada her zaman boş dize ''
döner, çoklu uygulamada uygulama adını döner
$request->app;
Kapanış fonksiyonları herhangi bir uygulamaya ait olmadığı için, kapanış rotasından gelen isteklerde
$request->app
daima boş dize''
döner
Kapanış rotası için bakınız: Rotalar
İstek Denetleyici Sınıf Adını Alma
Denetleyiciye karşılık gelen sınıf adını alır
$request->controller;
app\controller\IndexController
benzeri birşey döner
Kapanış fonksiyonları herhangi bir denetleyiciye ait olmadığı için, kapanış rotasından gelen isteklerde
$request->controller
daima boş dize''
döner
Kapanış rotası için bakınız: Rotalar
İstek Yöntem Adını Alma
İsteğe karşılık gelen denetleyici yöntem adını alır
$request->action;
index
gibi bir şey döner
Kapanış fonksiyonları herhangi bir denetleyiciye ait olmadığı için, kapanış rotasından gelen isteklerde
$request->action
daima boş dize''
döner
Kapanış rotası için bakınız: Rotalar