gpt4 book ai didi

php - 基于标准 PHP 查询字符串的路由

转载 作者:可可西里 更新时间:2023-11-01 01:10:29 26 4
gpt4 key购买 nike

如您所知,Zend Framework (v1.10) 使用基于斜杠分隔参数的路由,例如。

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

问题是:如何强制 Zend Framework,使用标准 PHP 查询字符串检索操作和 Controller 名称,在这种情况下:

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

我试过:

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;
}

但它对我不起作用。

最佳答案

$front->setRequest($request);

该行只设置了 Request 对象实例。 frontController 仍然通过路由器运行请求,在那里它被分配要调用的 Controller /操作。

您需要创建自己的路由器:

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);
}
}}

然后在你的 Bootstrap 中:

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

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

关于php - 基于标准 PHP 查询字符串的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com