Standart PHP sorgu dizesinde göre yönlendirme

2 Cevap php

Bildiğiniz gibi, Zend Framework (v1.10) eğik ayrıldı params, eski dayalı yönlendirme kullanır.

[server]/controllerName/actionName/param1/value1/param2/value2/

Queston: Bu durumda, standart PHP sorgu dizesi kullanarak eylem ve denetleyici adını retrive, Zend Framework zorlamak nasıl:

[server]?controller=controllerName&action=actionName&param1=value1&param2=value2

Ben denedim:

protected function _initRequest()
{
    // Ensure the front controller is initialized
    $this->bootstrap('FrontController');

    // Retrieve the front controller from the bootstrap registry
    $front = $this->getResource('FrontController');

    $request = new Zend_Controller_Request_Http();
    $request->setControllerName($_GET['controller']);
    $request->setActionName($_GET['action']);
    $front->setRequest($request);

    // Ensure the request is stored in the bootstrap registry
    return $request;
}

Ama bu benim için çalıştı değil.

2 Cevap

$front->setRequest($request);

Satırı sadece istek nesne örneğini ayarlar. FrontController hala ne denetleyicisi / eylem aramak için atanır bir router üzerinden isteği çalışır.

Kendi yönlendirici oluşturmak gerekir:

class My_Router implements Zend_Controller_Router_Interface
{
    public function route(Zend_Controller_Request_Abstract $request)
    {
        $controller = 'index';
        if(isset($_GET['controller'])) {
            $controller = $_GET['controller'];
        }

        $request->setControllerName($controller);

        $action = 'index';
        if(isset($_GET['action'])) {
            $action = $_GET['action'];
        }

        $request->setActionName($action);
    }
}}

Sonra bootstrap içinde:

protected function _initRouter()
{
    $this->bootstrap('frontController');
    $frontController = $this->getResource('frontController');

    $frontController->setRouter(new My_Router());
}

Denedim: $router->removeDefaultRoutes(), sonra da $request->getParams() veya $request->getServer()?