Zend Framework - Yönlendirme
Yönlendirme haritaları Request URIbelirli bir denetleyicinin yöntemine. Bu bölümde, rotaların bir Zend Çerçevesinde nasıl uygulanacağını göreceğiz.
Genel olarak, herhangi bir URI'nin üç bölümü vardır -
- Ana bilgisayar adı segmenti,
- Yol segmenti ve
- Sorgu segmenti.
Örneğin, URI / URL'de - http://www.example.com/index?q=data, www.example.com Ana Bilgisayar Adı Segmenti, index Yol Segmenti ve q=dataSorgu Segmentidir. Genel olarak, yönlendirme,Page segmentbir dizi kısıtlamaya karşı. Herhangi bir sınırlama eşleşirse, bir dizi değer döndürür. Ana değerlerden biri kontrolördür.
Yönlendirme ayrıca belirli bir durumda ana bilgisayar segmentini, sorgu segmentini, istek HTTP yöntemlerini, istek HTTP üstbilgilerini vb. Kontrol eder.
Rota ve RouteStack
Rota, yönlendirmedeki ana nesnedir. Zend Framework, rota nesnesi için özel bir arayüze sahiptir,RouteInterface. Tüm rota nesnesinin RouteInterface'i uygulaması gerekir. RouteInterface'in tam listesi aşağıdaki gibidir -
namespace Zend\Mvc\Router;
use Zend\Stdlib\RequestInterface as Request;
interface RouteInterface {
public static function factory(array $options = []); public function match(Request $request);
public function assemble(array $params = [], array $options = []);
}
Ana yöntem match. Bu eşleştirme yöntemi, verilen talebi içinde tanımlanan kısıtlamaya göre kontrol eder. Herhangi bir eşleşme bulunursa,RouteMatchnesne. Bu RouteMatch nesnesi, eşleşen isteğin ayrıntılarını parametre olarak sağlar. Bu parametreler şuradan çıkarılabilir:RouteObject kullanmak getParams yöntem.
RouteObject öğesinin tam listesi aşağıdaki gibidir -
namespace Zend\Mvc\Router;
class RouteMatch {
public function __construct(array $params); public function setMatchedRouteName($name);
public function getMatchedRouteName();
public function setParam($name, $value);
public function getParams();
public function getParam($name, $default = null);
}
Genel olarak, tipik bir MVC uygulamasının birçok yolu vardır. Bu rotaların her biri LIFO sırasına göre işlenecek ve tek bir rota eşleştirilerek iade edilecektir. Eşleşen / döndürülen yol yoksa, uygulama "Sayfa bulunamadı" hatası verir. Zend Framework, rotaları işlemek için bir arayüz sağlar,RouteStackInterface. Bu RouteStackInterface, yol ekleme / kaldırma seçeneğine sahiptir.
RouteStackInterface'in tam listesi aşağıdaki gibidir -
namespace Zend\Mvc\Router;
interface RouteStackInterface extends RouteInterface {
public function addRoute($name, $route, $priority = null); public function addRoutes(array $routes);
public function removeRoute($name); public function setRoutes(array $routes);
}
Zend çerçevesi, RouteStack arayüz ve aşağıdaki gibidir -
- SimpleRouteStack
- TreeRouteStack
Güzergah Türleri
Zend çerçevesi "Zend \ Mvc \ Router \ Http" ad alanı altındaki tüm durumlar için çok sayıda hazır yönlendirme nesnesi sağlar. Verilen durum için uygun rota nesnesini seçmek ve kullanmak yeterlidir.
Mevcut rotalar aşağıdaki gibidir -
Hostname - URI'nin ana bilgisayar kısmıyla eşleşmek için kullanılır.
Literal - Tam URI ile eşleşmek için kullanılır.
Method - Gelen isteğin HTTP yöntemini eşleştirmek için kullanılır.
Part - Özel mantık kullanarak URI yol segmentinin bir kısmını eşleştirmek için kullanılır.
Regex - URI yolu segmentini Regex Modeli ile eşleştirmek için kullanılır.
Schema - http, https, vb. Gibi URI Şemasıyla eşleşmek için kullanılır.
Segment - URI yolunu birden çok segmente bölerek eşleştirmek için kullanılır.
En sık kullanılan değişmez değeri ve Route segmentini nasıl yazacağımızı görelim. Rotalar genellikle her modülün yapılandırma dosyasında belirtilir -module.config.php.
Değişmez Yol
Tipik olarak, rotalar bir LIFO sırasına göre sorgulanır. Değişmez yol, URI yolunun tam olarak eşleşmesini sağlamak içindir.
Aşağıda gösterildiği gibi tanımlanmıştır -
$route = Literal::factory(array(
'route' => '/path',
'defaults' => array('controller' => 'Application\Controller\IndexController',
'action' => 'index',),
));
Yukarıdaki rota, /path istek url'sinde ve döner index olarak action ve IndexController denetleyici olarak.
Segment Rotası
URL'nizin değişken parametreler içermesi gerektiğinde, bölümlere ayrılmış bir yol kullanılır.
Aşağıda verildiği gibi açıklanmıştır -
$route = Segment::factory(array(
'route' => '/:controller[/:action]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
'action' => '[a-zA-Z][a-zA-Z0-9_-]+',
),
'defaults' => array(
'controller' => 'Application\Controller\IndexController',
'action' => 'index',),
));
Burada, Segmentler iki nokta üst üste ile gösterilir ve ardından alfanümerik karakterler gelir. Bir segmenti tutarsanız isteğe bağlıysa, parantez içine alınır. Her bölüm kendisiyle ilişkili kısıtlamalara sahip olabilir. Her kısıtlama bir düzenli ifadedir.
Eğitim Modülünde Rotayı Yapılandırma
Eğitim modülümüze bir segment rotası ekleyelim. Eğitim modülü yapılandırma dosyasını güncelleyin -module.config.php mevcut myapp/module/Tutorial/config.
<?php
namespace Tutorial;
use Zend\ServiceManager\Factory\InvokableFactory;
use Zend\Router\Http\Segment;
return [
'controllers' => [
'factories' => [
Controller\TutorialController::class => InvokableFactory::class,
],
],
'router' => [
'routes' => [
'tutorial' => [
'type' => Segment::class,
'options' => [
'route' => '/tutorial[/:action[/:id]]',
'constraints' => [
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
],
'defaults' => [
'controller' => Controller\TutorialController::class,
'action' => 'index',
],
],
],
],
],
'view_manager' => [
'template_path_stack' => ['tutorial' => __DIR__ . '/../view',],
],
];
Başarıyla rotamızı ekledik. Tutorialmodül. Eğitim modülümüzü tamamlamada sadece bir adım gerideyiz. Eklememiz gerekView sonraki bölümde öğreneceğimiz modülümüz için.