[英]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¶m2=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.