Phalcon Framework Dersleri – 4 / Routing

Merhaba arkadaşlar,

Uzun bir arada gerek iş yoğunluğu, gerek projelerimin yoğunluğu gerekse de yeni teknolojilere ayırdığım vakit nedeni ile bloga pek yazı yazma fırsatı bulamamıştım vakit buldukça birşeyler karalamaya devam edeceğim.

Bu yazımızda Phalcon PHP’de rotalara değineceğiz. Bildiğiniz gibi controller ve metodumuzu oluşturduğumuzda localhost/controller/method adresinden ilgili sayfamıza erişim sağlayabiliyoruz. Peki URL’imizi özelleştirmek istersek ne yapacaktık ? -Klasik bir yöntemde bunu .htaccess ile yapacaktık işte rotalar tamda bu noktada kolaylık sağlıyor. .htaccess’de ekstra hiç bir tanımlama yapmadan php ile özel url oluşturabilirsiniz. Başka bir deyişle Controller ve Metodumuza mapping yapıyoruz. Phalcon PHP Routing bileşeni de bu konuda oldukça esneklik sağlıyor, örneklere geçelim;

<?php

$router = new \Phalcon\Mvc\Router();

$router->add(
    "/hakkimizda",
    array(
        "controller" => "pages", // PagesController
        "action"     => "about", // aboutAction
    )
);

$router->add(
    "/uye/ayibogan",
    array(
        "controller" => "users", // UsersController
        "action"     => "profile", // profileAction
    )
);

$router->handle();

Gördüğünüz üzere başarılı bir şekilde rotamızı oluşturduk. Gelelim Bootstrap içerisinde kullanımına. Benim tercih ettiğim düzene göre anlatımıma devam edeceğim. /app/config klasörü içerisine routes.php dosyamızı oluşturalım. Daha sonra bootstrap’de (public/index.php) rotamızı aşağıda ki şekilde kuralım.

<?php

/**
* routing
*/
$di->set('router', function(){
    require __DIR__.'/../app/config/routes.php';
    return $router;
});

Routing bileşenimizi tanımladık artık projemizde rota oluşturmaya başlayabiliriz. routes.php dosyamızı açalım ve yazmaya başlayalım

<?php

$router = new \Phalcon\Mvc\Router();

$router->add(
    "/haber/([0-9]{4})/([0-9]{2})/([0-9]{2})/:params",
    array(
        "controller" => "news",
        "action"     => "detail",
        "year"       => 1, // ([0-9]{4})
        "month"      => 2, // ([0-9]{2})
        "day"        => 3, // ([0-9]{2})
        "params"     => 4, // :params
    )
);

Bu örneğimizde değişken olan yıl, ay, gün ve params’ı tanımlıyoruz ve newscontroller’ın detailAction’ına gönderiyoruz. Yani url’imiz şu şekilde görünecek http://localhost/haber/2014/09/17/googledan-hurriyet-ve-milliyete-buyuk-sok. newscontrollerimizde ise parametrelimizi

<?php

class NewsController extends \Phalcon\Mvc\Controller
{    

    public function detailAction()
    {

        // yıl yani year parametresini al
        $year = $this->dispatcher->getParam("year");

        // month parametresini al
        $month = $this->dispatcher->getParam("month");

        // day parametresini al
        $day = $this->dispatcher->getParam("day");

    }

}

Örneklerimize devam ediyoruz;

<?php

$router->add(
    "/kitap/{category}/{name}.{type:[a-z]+}",
    array(
        "controller" => "books",
        "action"     => "index"
    )
);

şeklinde tanımlıyor ve controllerimizden şu şekilde parametreleri elde ediyoruz

<?php
 
class BooksController extends \Phalcon\Mvc\Controller
{
 
    public function indexAction()
    {
       // category parametresi
        $category = $this->dispatcher->getParam("category ");
 
        // name parametresi
        $name = $this->dispatcher->getParam("name");
 
        // type parametresi
        $type = $this->dispatcher->getParam("type");
 
    }
 
}

En basit anlatımı ile Phalcon’da rota bu şekillerde oluşturuluyor. Daha spesifik rota oluşturabilmek için buraya göz atmayı unutmayın 🙂

Diğer derslerde görüşmek üzere.