Özgür Adem Işıklı Özgür Adem Işıklı Software Developer Resume Contact

Software Developer

Patika ile Kolay Rota Yönetimi (PHP)

Bugün Patika isimli PHP tabanlı rota yönetim kütüphanesini yayınladım. Bu blog yazısında elimden geldiğince paketi tanıtmaya çalışacağım.

Neden?

PHP’de bir çok farklı ve oldukça başarılı routing kütüphaneleri bulunuyor. Bunlar hakkında daha önce Fast Route Kütüphanesi ve Symfony/Routing ile Rotalarınızı Yönetin başlıkları altında yazılar yayımlamıştım. Ancak bu her iki güzide kütüphanede de rotaları el ile tanımlıyor olmak bazı durumlarda beni çok yoruyordu.

Özellikle API tasarlarken, elimden geldiğinde hafif ve rotalara göre doğrudan beni Controller sınıflarına iletecek bir yapıya ihtiyacım vardı. Önce bu yapıyı kendim kurdum, kullandım ve daha sonra bunun bir paket olmasının güzel olabileceğini düşündüm. Önümüzdeki günlerde gerçekten bir ihtiyaç mı değil mi göreceğiz. :)

Nasıl?

Paketin kurulumları ve konfigürasyonunu dokümantasyon üzerinden görmeniz mümkün. Çalışmaya hazır hale getirdikten sonra Patika istek yapılan URL’yi çözümleyerek, bu URL’yi bir namespace’e dönüştürüyor. Eğer namespace altında bir sınıf varsa bu sınıfı parametrelerle birlikte çağırıyor. Eğer yoksa Controller ya da Method bulunamadı diyerek 2 farklı Exception altında hata veriyor. Böylelikle rota yazmanıza gerek kalmıyor.

Örnek URL Yapıları ve Çözümlemeleri

1. Basit Rota

GET localhost/users/all
# Namespace: App\Controllers\Users
# Method: all
# Arguments: []
2. Uzun Rota

Bu bölümde rotayı PHP’nin izin verdiği ölçüde uzatma imkanımız var.


GET localhost/admin/manager/users/all
# Namespace: App\Controllers\Admin\Manage\Users
# Method: all
# Arguments: []
3. Parametreli


GET localhost/admin/manage/users/get/1 
# Namespace: App\Controllers\Admin\Manage\Users
# Method: get
# Arguments: [1]

namespace App\Controllers\Admin\Manage;

class Users {

    public function get($id)
    {
        echo $id;
    }

}
4. Çoklu Parametreli

GET localhost/admin/manage/users/getByArgument/1/2/3/foo/bar 
# Namespace: App\Controllers\Admin\Manage\Users
# Method: get
# Arguments: [1, 2, 3, 'foo', 'bar']

namespace App\Controllers\Admin\Manage;

class Users {

    public function get($one, $two, $three, $foo, $bar)
    {
        echo $id;
    }

}
```

What About Comments?

I do not use any comment system such as Disqus because of user's privacy. If you want to discuss something about this post, you may open an issue on the repo.

You may check what is the problem with Disqus;