簡體   English   中英

Zend Framework 1使用get路由傳遞參數

[英]Zend Framework 1 pass parameters using get to the route

我希望標題聽起來不會太混亂,但是我不知道如何命名我的問題。

簡要介紹:
我正在使用Zend 1.1X。
目前,我一直在使用通過POST發送少量參數的搜索表單。

現在我必須更改它以使用GET,我創建了一條類似於以下內容的路由:

"search/what/:what/shape/:shape" 

依此類推,我還有2個可選參數,默認為null。

我正在嘗試在表單的操作處生成一個URL(使用Zend View Helper Url),但是會引發異常:

Uncaught exception 'Zend_Controller_Router_Exception' with message what is not specified

我現在不知道該怎么辦。 如果我僅將路線更改為“搜索”,它將正確發送表單,但最終會顯示為"search?what=XXXX&shape=YYYY"而不是"search/what/XXXX/shape/YYYY"

有什么辦法可以解決我喜歡的方式嗎??? :>

@編輯

我認為這也應該提及-我有另一種形式,類似,指向沒有指定參數的路由,並且uri被“轉換”為“鍵/值”對的形式。 它們之間的唯一區別是,第一個不使用Url助手,而是將方法部分進行了硬編碼,並且我的表單以編程方式提交(按鈕=> jQuery內容=>提交)。 我相信這不會在這里有所作為嗎? :>

我希望這種行為的任何可能的根源都取決於您,因為目前我真的很困,而且我根本無法找到問題所在。

提前致謝!

使用GET方法,表單將生成如下所示的url: action?param1=val1&param2=val2&....我看到了兩種解決方案:
首先是通過javacsript重新生成URL,我們可以想象這樣的事情:

<form method="get" id="id_form">
....
</form>
<script> 
    var objet_form = document.getElementById('id_form');

    function gestionclic(event){
        var url = objet_form.action;
        for(var i = 0; i < objet_form.length; i++){
            url += "/" + objet_form[i].name + "/" + objet_form[i].value;
        }
        objet_form.action = url;
    }

    if (objet_form.addEventListener){
        objet_form.addEventListener("submit", gestionclic, false);
    } else{
        objet_form.attachEvent("onsubmit", gestionclic, false);
    }
</script>

但是我認為這不是一個好的解決方案。

第二個是使用插件來管理它:

對於插件,必須在bootstrap聲明它。
例如:

public function _initPlugins(){
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new Application_Plugin_PRoutage());
}

在這個示例application/plugins文件夾中,創建PRoutage.php插件,如下所示:

class Application_Plugin_PRoutage extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {         
    ...
    }
}

並使用$request變量,您可以使用$request->getParams()將數據作為數組訪問。
我們可以想象這樣的事情:

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
{         
    $param = $request->getParams();
    $what = "";
    $shape = "";
    if (isset($param['what'])  $what  = $param['what'];
    if (isset($param['shape']) $shape = $param['shape'];

    if ($what == "XXXX" && $shape == "YYYY"){
        $request->setControllerName('other_controler')
                ->setActionName('other_action')
                ->setDispatched(true) ;
    }
}

希望對您有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM