Generator URL Phalcon

Phalcon \ MVC \ Url adalah komponen yang bertanggung jawab sebagai Generator URL Phalcon. Ini mampu menghasilkan url independen berdasarkan rute.

Menetapkan Base-URI 

Tergantung dari mana direktori root dokumen Anda aplikasi Anda terinstal, mungkin memiliki base-uri atau tidak.

Misalnya, jika root dokumen Anda adalah /var/www/htdocs dan aplikasi yang terinstal pada /var/www/htdocs/invo maka baseUri Anda adalah “/invo/”. Jika Anda menggunakan VirtualHost atau aplikasi Anda terinstal di document root, maka base-Uri Anda “/”.  Jalankan kode berikut untuk mengetahui uri dasar terdeteksi oleh Phalcon:

<?php

$url = new Phalcon\Mvc\Url();
echo $url->getBaseUri();

Secara default, Phalcon secara otomatis dapat mendeteksi baseUri Anda, tetapi jika Anda ingin meningkatkan kinerja aplikasi Anda dianjurkan menyiapkan secara manual:

<?php

$url = new Phalcon\Mvc\Url();

//Setting a relative base URI
$url->setBaseUri('/invo/');

//Setting a full domain as base URI
$url->setBaseUri('//my.domain.com/');

//Setting a full domain as base URI
$url->setBaseUri('http://my.domain.com/my-app/');

Biasanya, komponen ini harus terdaftar dalam Dependency Injector container, sehingga Anda dapat mengatur di sana:

<?php

$di->set('url', function(){
    $url = new Phalcon\Mvc\Url();
    $url->setBaseUri('/invo/');
    return $url;
});

Generate URI 

Jika Anda menggunakan Router dengan perilaku default. Aplikasi Anda dapat mencocokkan rute berdasarkan pada pola berikut: “/:controller/:action/:params”. Dengan demikian mudah untuk membuat rute yang memenuhi pola tsb (atau pola lain yg didefinisikan dalam router) memberikan string dengan metode “get”:

<?php echo $url->get("products/save") ?>

Perhatikan bahwa tidak perlu tambahkan base-uri. Jika Anda telah memiliki rute dgn nama, Anda dapat dengan mudah generate secara dinamis. Misalnya jika Anda memiliki rute sebagai berikut:

<?php

$route->add('/blog/{year}/{month}/{title}', array(
    'controller' => 'posts',
    'action' => 'show'
))->setName('show-post');

Sebuah URL dapat dihasilkan dengan cara sebagai berikut:

<?php

//This produces: /blog/2012/01/some-blog-post
$url->get(array(
    'for' => 'show-post',
    'year' => 2012,
    'month' => '01',
    'title' => 'some-blog-post'
));

Membuat URL tanpa Mod-Rewrite 

Anda juga dapat menggunakan komponen ini untuk menciptakan url tanpa mod-rewrite:

<?php

$url = new Phalcon\Mvc\Url();

//Pass the URI in $_GET["_url"]
$url->setBaseUri('/invo/index.php?_url=/');

//This produce: /invo/index.php?_url=/products/save
echo $url->get("products/save");

Anda juga dapat menggunakan $_SERVER[“REQUEST_URI”]:

<?php

$url = new Phalcon\Mvc\Url();

//Pass the URI in $_GET["_url"]
$url->setBaseUri('/invo/index.php?_url=/');

//Pass the URI using $_SERVER["REQUEST_URI"]
$url->setBaseUri('/invo/index.php/');

Dalam kasus ini, diperlukan untuk secara manual menangani URI yg diperlukan di Router:

<?php

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

// ... define routes

$uri = str_replace($_SERVER["SCRIPT_NAME"], '', $_SERVER["REQUEST_URI"]);
$router->handle($uri);

Ini menghasilkan rute akan terlihat seperti:

<?php

//This produce: /invo/index.php/products/save
echo $url->get("products/save");

Membuat URL dari Volt 

Fungsi “url” tersedia dalam volt untuk menghasilkan URL menggunakan komponen ini:

<a href="{{ url("posts/edit/1002") }}">Edit</a>

Menghasilkan rute statis:

<link rel="stylesheet" href="{{ static_url("css/style.css") }}" type="text/css" />

URI Static vs Dinamis 

Komponen ini memungkinkan Anda untuk mendirikan basis uri yg berbeda untuk sumber daya statis dalam aplikasi:

<?php

$url = new Phalcon\Mvc\Url();

//Dynamic URIs are
$url->setBaseUri('/');

//Static resources go through a CDN
$url->setStaticBaseUri('http://static.mywebsite.com/');

Phalcon \ Tag akan meminta kedua URI dinamis dan statis menggunakan komponen ini.

Menerapkan Url Generator Anda sendiri

antarmuka Phalcon \ MVC \ UrlInterface  harus diimplementasikan untuk membuat Anda Generator URL sendiri menggantikan yang disediakan oleh Phalcon.

Terjemahan dr Generate URL dan Path Pada Phalcon http://docs.phalconphp.com/en/latest/reference/url.html