Hasta que logré hacer listas dependientes con widgets de la siguiente manera:
con el plugin sfJqueryWidgetsPlugin, es para Propel modifiqué su código para q trabaje con doctrine en :
class sfWidgetFormPropelSelectAjax extends sfWidgetFormPropelSelect
por:
class sfWidgetFormPropelSelectAjax extends sfWidgetFormDoctrineSelect
y mi ClienteForm.class.php quedó así:
<?php
class ClienteForm extends BaseClienteForm
{
public function configure()
{
$cliente = $this->getObject();
$query2 = Doctrine_Query::create()
->from('Distrito d')
->where('d.provincia_id = ?', $cliente->getProvinciaId());
$this->widgetSchema['distrito_id'] = new sfWidgetFormDoctrineSelect(array(
'model' => 'Distrito',
'method' => 'getDistrito',
'query' => $query2
));
$query1 = Doctrine_Query::create()
->from('Provincia p')
->where('p.departamento_id = ?',$cliente->getDepartamentoId());
$this->widgetSchema['provincia_id'] = new sfWidgetFormPropelSelectAjax(array(
'model' => 'Provincia',
'method' => 'getProvincia',
'query' => $query1,
'url' => 'cliente/distporprov',
'update' => 'cliente_distrito_id',
'update_element' => 'select'
));
$this->widgetSchema['departamento_id'] = new sfWidgetFormPropelSelectAjax(array(
'model' => 'Departamento',
'method' => 'getDepartamento',
'url' => 'cliente/provpordep',
'update' => 'cliente_provincia_id',
'update_element' => 'select',
'add_empty' => 'Seleccione'
));
}
}
y mi actions tiene lo siguiente:
class clienteActions extends autoClienteActions
{
public function executeProvpordep(sfWebRequest $request)
{
$q = Doctrine_Query::Create()
-> select('p.id,p.provincia')
-> from('Provincia p')
-> where('p.departamento_id = ?',$request->getParameter('id'));
$this->provincia_list = $q->execute();
}
public function executeDistporprov(sfWebRequest $request)
{
$q = Doctrine_Query::Create()
-> select('d.id,d.distrito')
-> from('Distrito d')
-> where('d.provincia_id = ?',$request->getParameter('id'));
$this->distrito_list = $q->execute();
}
}
y los templates:
distporprovSuccess.php
<?php
$ret = '<option value = 0>...Seleccione</option>';
for ($i = 0; $i < $distrito_list->count(); $i++)
{
$ret = $ret.'<option value='.$distrito_list[$i]['id'].'>'.$distrito_list[$i]['distrito'].'</option>';
}
echo $ret;
?>
provpordepSuccess.php
<?php
$ret = '<option value = 0>...Seleccione</option>';
for ($i = 0; $i < $provincia_list->count(); $i++)
{
$ret = $ret.'<option value='.$provincia_list[$i]['id'].'>'.$provincia_list[$i]['provincia'].'</option>';
}
echo $ret;
?>
Espero que sirva de ayuda.
Ahora estoy trabajando en el validate.
José Luis Vicente Caballero