Zend Framework 2 không có khái niệm định tuyến cho mô-đun; tất cả các ánh xạ định tuyến nằm giữa một mẫu URI (cho các tuyến HTTP) và một lớp điều khiển cụ thể. Điều đó nói rằng, Zend\Mvc
cung cấp trình xử lý sự kiện (Zend\Mvc\ModuleRouteListener
) cho phép bạn xác định mẫu URI ánh xạ tới nhiều bộ điều khiển dựa trên một mẫu nhất định và giả lập "định tuyến mô-đun". Để xác định một lộ trình như vậy, bạn sẽ đặt này như cấu hình định tuyến của bạn:
'router' => array(
'routes' => array(
// This defines the hostname route which forms the base
// of each "child" route
'home' => array(
'type' => 'Hostname',
'options' => array(
'route' => 'site.com',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This Segment route captures the requested controller
// and action from the URI and, through ModuleRouteListener,
// selects the correct controller class to use
'default' => array(
'type' => 'Segment',
'options' => 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' => 'Index',
'action' => 'index',
),
),
),
),
),
),
),
(Click here to see an example of this @ ZendSkeletonApplication)
Đây chỉ là một nửa của sự cân bằng, mặc dù. Bạn cũng phải đăng ký mọi lớp điều khiển trong mô-đun của mình bằng cách sử dụng định dạng đặt tên cụ thể. Điều này cũng được thực hiện thông qua các tập tin cấu hình giống nhau:
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
),
Mấu chốt mảng là bí danh ModuleRouteListener sẽ sử dụng để tìm ra bộ điều khiển bên phải, và nó phải nằm trong định dạng sau:
<Namespace>\<Controller>\<Action>
Giá trị được gán cho khóa mảng này là tên đầy đủ của lớp điều khiển.
(Click here to see an example of this @ ZendSkeletonApplication)
LƯU Ý: NẾU bạn không sử dụng ZendSkeletonApplication, hoặc đã gỡ bỏ nó mô-đun ứng dụng mặc định, bạn sẽ cần phải đăng ký ModuleRouteListener thuộc một trong các module của riêng bạn. Click here to see an example of how ZendSkeletonApplication registers this listener
Cảm ơn bạn rất nhiều vì những lời giải thích rõ ràng và chính xác. Tôi lấy giải pháp của bạn. Tôi đã vật lộn rất nhiều về điều này. – Sapher
Điều đó thật tuyệt vời, cảm ơn bạn. – cr125rider
tôi sử dụng mamp pro và tôi tạo một tên miền phụ trên tên máy chủ ảo của tôi vì vậy sau khi tôi sử dụng reseller.myhost.com/test nó là okey nhưng nếu tôi viết reseller.myhost.com nó đi đến chỉ mục của ứng dụng không indexaction của mô-đun của tôi –