0
我需要管理形式幫助上的Symfony 3.Symfony 3 - Builder窗體 - 過濾器選擇選擇?
行動:使用「類別」實體在一個單一的形式來篩選另一個 實體「子類別」。精密 「類別」實體由多對多關係 的「子類別」實體相連。
查看:當我選擇我選擇的第一 選擇類別,僅次於選擇提出我的 這其中的子類別。
我不得不使用Ajax,由窗體生成器或嫩枝過濾器。我找不到一個乾淨而簡單的方法,所以我呼籲你的幫助。
我需要管理形式幫助上的Symfony 3.Symfony 3 - Builder窗體 - 過濾器選擇選擇?
行動:使用「類別」實體在一個單一的形式來篩選另一個 實體「子類別」。精密 「類別」實體由多對多關係 的「子類別」實體相連。
查看:當我選擇我選擇的第一 選擇類別,僅次於選擇提出我的 這其中的子類別。
我不得不使用Ajax,由窗體生成器或嫩枝過濾器。我找不到一個乾淨而簡單的方法,所以我呼籲你的幫助。
它實際上不是太複雜,但您將需要一個AJAX請求。這部分不需要真實的表格,因爲您對已選擇的主類別不感興趣,但僅對子類別有興趣。你最想要的時候,如果在子類中已被選中但也有一堆一堆的可能性執行一些動作,所以我只給你一推前鋒:
// controller
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class DefaultController extends Controller
{
/**
* @Route("/", name="my_action")
*/
public function myAction()
{
$em = $this->getDoctrine()->getManager();
$categories = $em->getRepository('AppBundle:Category')->findAll();
return $this->render('default/index.html.twig', array(
'categories' => $categories,
));
}
/**
* @Route("/subcategories", name="ajax_subcategories")
*/
public function ajaxSubCategoriesAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$category = $em->getRepository('AppBundle:Category')->find($request->get('id'));
if(null === $category)
{
return new Response('');
}
$options = '';
foreach($category->getSubCategories() as $subCategory)
{
$options .= '<option value="'.$subCategory->getId().'">'.$subCategory->getName().'</option>';
}
return new Response($options);
}
}
和模板:
{% extends 'base.html.twig' %}
{% block body %}
<h1>My page</h1>
<select id="category">
{% for category in categories %}
<option value="{{ category.id }}">{{ category.name }}</option>
{% endfor %}
</select>
<select id="subCategory">
{% if categories|length %}
{% for subCategory in categories[0].subCategories %}
<option value="{{ subCategory.id }}">{{ subCategory.name }}</option>
{% endfor %}
{% endif %}
</select>
{% endblock %}
{% block javascripts %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script>
$(function() {
$('#category').change(function() {
$.ajax({
url: '{{ path('ajax_subcategories') }}',
method: 'get',
data: {"id":$(this).val()},
success: function(data) {
$('#subCategory').html(data);
alert('SubCategory selected: ' + $('#subCategory').val());
// Now do something else
}
});
});
$('#subCategory').change(function() {
alert('SubCategory selected: ' + $(this).val());
// Now do something else
});
});
</script>
{% endblock %}
好的,非常感謝你爲我工作。 –
你好@Morgan,歡迎來到SO!請閱讀關於如何提問的指南[這裏](https://stackoverflow.com/help/how-to-ask)。爲了回答你的問題 - 它需要用英文寫成:) – tftd
完成了。對不起 –
不用擔心。你有一些代碼可以告訴我們嗎?你試過什麼了?我會做的是自定義「子類別」字段的呈現並將「Select2」附加到它。還有一些可以幫助在表單中更快地使用'select2'字段的包。 – tftd