我們的應用程序使用多個webforms,其中一些應用程序只應添加或更改查詢字符串中的幾個參數。例如,列表順序有一個過濾器表單和一個表單(只是一個下拉列表)。通過symfony形式傳遞當前querystring參數
兩者都是獨立的,但如果我改變一個,我必須傳遞當前查詢字符串參數與新請求。我如何管理它?
我們的應用程序使用多個webforms,其中一些應用程序只應添加或更改查詢字符串中的幾個參數。例如,列表順序有一個過濾器表單和一個表單(只是一個下拉列表)。通過symfony形式傳遞當前querystring參數
兩者都是獨立的,但如果我改變一個,我必須傳遞當前查詢字符串參數與新請求。我如何管理它?
這只是可能的解決方案之一,它將取決於您的實施,如果它會幫助你。
<?php
$allowedQueryParams = array('param1', 'param2', 'param3');
// I'll fake a request here
$request = new Request(array('param2' => 'foo', 'param3' => 'bar', 'param4' => 'dummy'));
$formFactory = Forms::createFormFactoryBuilder()->getFormFactory();
$formBuilder = $formFactory->createBuilder();
$formBuilder->add('param1', 'text');
$data = array();
foreach ($allowedQueryParams as $param) {
if ($request->query->has($param)) {
// Add the query param as hidden field to you form
$formBuilder->add($param, 'hidden');
$data[$param] = $request->query->get($param);
}
}
$formBuilder->setData($data);
$form = $formBuilder->getForm();
所以基本上你用當前查詢參數添加隱藏字段。
編輯: 但是,如果你將有很多形式,你可能會想這樣做有EventSubscriber
另一種方法是將兩種形式組合成一個主表單。
從你的控制器:
$formData = array(
'filterParams' => array(), // Default filter parameters
'listOrderParams' => array(), // Default list order parameters
);
$form = $this->createFormBuilder($task)
->add('filterParams', new FilterFormType())
->add('listOrderParams', new ListOrderFormType())
->add('update', 'submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$formData = $form->getData();
可能是將這一目標歸檔的最佳方法。我會試試看。 – Daniel
但是這不是從查詢字符串isnit中獲取數據? –
它不那麼容易,因爲formclass必須添加所有這些領域。該表格可以包含在多個頁面中並結合其他請求。還有一點是,symfony表單經常使用數組,這些結構必須保留在隱藏域中。 – Daniel