29 Jun 2018
Laravel HTTP Request yapısı ve kullanımı
  • 4727 Okuma
  • 0 Yorum
  • 2 Beğeni

Laravel HTTP Request yapısı ve kullanımı

Bu makalemde Laravel'de HTTP Request işlemlerinin neler olduğunu anlatacağım. Kullanıcıdan gelen Http isteğine erişim, bu istek üzerinde yapılabilen kontroller, gelen istekleri çerezler  (cookies) üzerinde saklama ve bu çerezlere erişim, kullanıcı tarafından yüklenen (upload) dosyaya erişim ve dosya üzerinde kontrollerin yapılarak saklanması ile proxy kullanımı ve yapılandırmasını örneklerle anlatmaya çalışacağım.


Laravel'de kullanıcıdan gelen Http isteğine (request) erişim için "Illuminate\Http\Request" sınıfı kullanılmaktadır. Örnek kullanım,

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

        //
    }
}


Eğer kullanıcıdan bir değeri bir parametre olarak alıyorsak, bu durumda bu parametreye erişim için ayrıca değişken kullanmalıyız. Örneğin, kullanıcı ID'sini parametere olarak Controller'a gönderilmesi,

Route::put('user/{id}', 'UserController@update');


namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Update the specified user.
     *
     * @param  Request  $request
     * @param  string  $id
     * @return Response
     */
    public function update(Request $request, $id)
    {
        //
    }
}


Http istediğine yönlendirme içerisinde de doğrudan erişebiliriz. Örnek kullanım,

use Illuminate\Http\Request;

Route::get('/', function (Request $request) {
    //
});


Fakat bu gibi kullanımlarda yönlendirmeleri cache'te tutamayız. Bu konuya başka bir makalemde değinmiştim. Bu makaleme buradan erişebilirsiniz.


Http İsteğine ve Parametrelerine Erişim


Gelen Http isteği yoluna erişim için,

$uri = $request->path();


Gelen isteğin belirli bir biçime uyup uymadığının kontrolü yapılabilir. Örnek kullanım,

if ($request->is('admin/*')) {
    //
}


Gelen Http URL bilgisine erişim,

$url = $request->url();


Gelen Http URL bilgisine parametreleri ile beraber erişim,,

$url = $request->fullUrl();


Gelen Http istedğinin hangi method'u kullandığı bilgisine erişim,

$method = $request->method();

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


Kullanıcı Giriş (Input) Değerlerine Erişim


Bütün giriş değerlerine dizi (array) olarak erişim,

$input = $request->all();


Belirli bir giriş değerine erişim için,

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


Belirli bir giriş değerine erişim ve varsayılan değer ataması, Örnek kullanımda kullanıcı tarafından "name" değerinin belirtilmemesi durumunda varsayılan değer olarak "Webdeyaz" kullanılacak.

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


Gelen isteğin bir dizi olması durumunda " . " ile dizideki değişkenlere erişim sağlanabilir. Örnek kullanım,

$name = $request->input('products.0.name');

$names = $request->input('products.*.name');


Parametre değerlerine erişim için örnek kullanım,

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


$name = $request->query('name', 'Helen');


$query = $request->query();


JSON isteği giriş değerlerine erişim örneği,

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


Http isteğinin bir değere sahip olup olmadığının kontrolü için,

if ($request->has('name')) {
    //
}


Http isteğinin bir dizi olması durumunda örnek kullanım,

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


Gelen Http isteğinin bir değere sahip olup olmadığın kontrolüne örnek kullanım, Bu durumda hem "name" giriş değerinin olup olmadığı hem de bu değerin boş olup olmadığı kontrol ediliyor.

if ($request->filled('name')) {
    //
}


Önceki Giriş Değerlerine Erişim


Bir kullanıcı formu doldurduğunuz ve formu gönderdiğinizde (submit) Laravel bu giriş değerlerini session'a kaydetmektedir. Kullanıcı giriş bilgilerinin Session üzerinde kaydetmek için aşağıdaki kodu kullanabilirsiniz.

$request->flash();


Fakat kullanıcının şifre bilgisini session'da tutmak güvenlik açısından uygun değildir. İstenilen giriş değerlerini session'da tutmamak için örnek kullanım,

$request->flashExcept('password');


Sadece istenilen değerleri session'da tutmak için,

$request->flashOnly(['username', 'email']);


Giriş değerleri ile beraber gelen isteği bir başka yere yönlendirmek için örnek kullanım

return redirect('form')->withInput(
    $request->except('password')
);


Eski giriş bilgilerine erişim örneği,

$username = $request->old('username');


Bu bilgilere "Blade" yapısı içerisinde erişim örneği,

<input type="text" name="username" value="{{ old('username') }}">


Çerezler (Cookies)


Laravel tarafından üretilen bütün çerezler şifreli ve imzalı bir şekilde saklanmaktadır. Bu bakımdan güvenli bir şekilde saklandığı söylenebilir. Çerezlerde saklanan bilgiye erişim örnekleri,

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


$value = Cookie::get('name');


Kullanıcıya bir cevap (response) dönerken, çerezde bir veri saklamak isteyebilirsiniz. Bunun için örnek kullanım,

return response('Hello World')->cookie(
    'name', 'value', $minutes
);


Ayrıca birden fazla değeri saklayabilirsiniz. Buna örnek kulllanım,

return response('Hello World')->cookie(
    'name', 'value', $minutes, $path, $domain, $secure, $httpOnly
);


Kullanıcıya gönderilen cevapları (response) kullanıcıya göndermeden önce çerezde saklamak isteyebilirsiniz. Bunun örnek kullanımlar,

Cookie::queue(Cookie::make('name', 'value', $minutes));

Cookie::queue('name', 'value', $minutes);


Dosyalara Erişim


Laravel kullanıcı tarafından yüklenen (upload) dosyaları kaydetmeniz için birden fazla çözüm sunmaktadır. Bunlara başka makalemde değinmiştim. Bu makaleme buradan erişebilirsiniz. Bu çözüm yöntemlerinden biri de gelen Http request ile dosyayı saklamaktır. Öncelikle Http isteği ile gelen bilgilerde dosyaya erişimin nasıl olduğuna bakalım.

Örnek kullanım,

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

$file = $request->photo;


Gelen istek içerisinde dosya olup olmadığının kontrolü için örnek kullanım,

if ($request->hasFile('photo')) {
    //
}


Dosyanın düzgün şekilde yüklenip (upload) yüklenmediğinin kontrolü için,

if ($request->file('photo')->isValid()) {
    //
}


Yüklenilen dosyanın bulunduğu dizin ve uzantısı bilgilerine erişim,

$path = $request->photo->path();

$extension = $request->photo->extension();


Yüklenilen dosyayı saklamak için örnek kullanım,

$path = $request->photo->store('images');

$path = $request->photo->store('images', 's3');


Yüklenilen dosyayı farklı şekilde saklamak için örnek kullanım,

ath = $request->photo->storeAs('images', 'filename.jpg');

$path = $request->photo->storeAs('images', 'filename.jpg', 's3');


Güvenilir Proxy Yapılandırması


Uygulamanızın, Yük dengeleyici (Load balancer) ile beraber çalıştığı durumlarda üretilen linkler her zaman HTTPS olmayabilir. Bunun çözümü için Laravel "App\Http\Middleware\TrustProxies" middleware'ını kullanmaktadır. Middleware ile ilgili ayrıntılı bilgileri başka makalemde anlatmıştım. Bu makaleme buradan erişebilirsiniz.

Güvenilir proxy kullanımı için Middleware üzerinde tanımlı "$proxies" dizisinde güvenilir proxy bilgileri girilmelidir. Ayrıca header bilgilerini de yapılandırabilirsiniz. Örnek kullanım,

namespace App\Http\Middleware;

use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;

class TrustProxies extends Middleware
{
    /**
     * The trusted proxies for this application.
     *
     * @var array
     */
    protected $proxies = [
        '192.168.1.1',
        '192.168.1.2',
    ];

    /**
     * The headers that should be used to detect proxies.
     *
     * @var string
     */
    protected $headers = Request::HEADER_X_FORWARDED_ALL;
}


Proxy IP adresinin dinamik olduğu ya da tam olarak bilmediğiniz durumlarda bütün proxy IP adreslerini diziye eklemek gerekmektedir. Bu gibi durumlarda sadece "*" olarak tanımlamak yeterlidir. Örnek kullanım,

/**
 * The trusted proxies for this application.
 *
 * @var array
 */
protected $proxies = '*';


Sonuç


Web uygulamalarında kullanıcıdan giriş değerleri alma ve bu giriş değerleri üzerinde kontrol ve işlemler yapma neredeyse tüm uygulamalarda karşılaşılan bir durumdur. Bu makalemde Laravel ile kullanıcıdan gelen değerlere erişim, değerlerin kontrolü, çerez bilgilerine erişim ve çerezlerin nasıl saklandığı konularına değindim. Ayrıca, dosya yükleme durumlarında dosyanın kontrolü, yolu, uzantısı vb. bilgilerine erişim ve saklanmasının nasıl olduğuna değindim. Son olarak proxy kullanım durumunda proxy yapılandırmasına değindim.


Karşılaştığınız sorunları bana mesaj yoluyla sorabilirsiniz.

Umarım faydalı olur. İyi çalışmalar.


Makaleyi faydalı buldunuz mu ?

Yazar


Legend Engineer

Legend Engineer

Mühendis (Bilgisayar)

Bilgisayar Mühendisliği mezunuyum. Bilgisayar alanında edindiğim bilgileri bu blog üzerinde paylaşıyorum. Beni takipte kalın.

Yorumlar


İlk yorum yapan sen ol

İlginizi Çekebilir

Makale Hakkındaki Düşünçelerinizi Paylaşın