В форме Symfony,
class ClientForm extends sfForm
{
public function configure()
{
$clients_data = ClientsData::getAllClients(); //get from database
$clients = array_merge(array("--Select Clients--", $clients_data);
$this->setWidgets(array(
"clients" => new sfWidgetFormChoice(array("choices" =>$clients)),
"products" =>new sfWidgetFormChoice(array("choices" =>array("--Select Product--")))
));
$this->setValidators(array(
"clients" => new sfValidatorChoice(array("choices" =>array_keys($clients_data))),
"products" => new sfValidatorString()
));
}
}
в представлении
<script type="text/javascript">
$(document).ready(function(){
$("#clients").change(function(){
var client_id=$("#clients").val();
$('#products > option').remove();
$.ajax({
type: 'POST',
url: 'products/load',
async: true,
cache: false,
dataType : 'json',
data: 'cid='+client_id,
success: function(jsonData){
$(jsonData.products).each(function()
{
$("#products").append($('<option></option>').val(this.id).html(this.item));
});
}
});
});
});
<script>
<form action="<?php url_for('submit/form'); ?>" id="form" method="post" >
<?php echo $form["clients"]->render(array('id' => 'clients')); ?>
<?php echo $form["clients"]->renderError(); ?>
<br/>
<?php echo $form["products"]->render(array('id' => 'products')); ?>
<?php echo $form["products"]->renderError(); ?>
<button type="submit">submit</button>
</form>
Приведенный выше код отправляет запрос Ajax в модуль продуктов с идентификатором клиента и на основе идентификатора клиента выполняет запроси возвращает данные о продукте для данного идентификатора клиента.
ПРИМЕЧАНИЕ. Javascript должен быть включен.
Надеюсь, это помогло вам.Вы также можете сделать это способом Symfony, пожалуйста, проверьте документы Symfony.