Cómo mandar llamar una función dentro de la misma clase

4,822 views
Skip to first unread message

syca

unread,
May 19, 2008, 1:26:23 PM5/19/08
to symfony-es
Hola, alguien sabe cómo mandar a llamar un método dentro de otro en
una misma clase?
Algo como lo que sigue, pero en symfony:

class B
{
public function z($sql)
{
}
public function x($a)
{
$this->z($a);
}
}

tengo las dos siguientes funciones:
public function executeBusca()
{
}

public function executeListaCalles()
{
$this->codigo = $this->getRequestParameter('getIdColonia');
}

Quiero pasar el valor codigo de ListaCalles a la funcion Busca

Y en el template ListaCallesSuccess.php, tengo lo siguiente:

<?php use_helper('Object') ?>
<table><tr><td>
<?php
$c = new Criteria();
$c->add(StreetPeer::ID_COLONIA, $codigo);

echo select_tag('calle1',
objects_for_select(StreetPeer::doSelect($c),'getIdStreet','getNombre'),array('size'
=> '1', 'style' => 'width:265px','include_blank'=>true));
?></td></tr>
</table>

Entonces necesito pasar lo que me arroja esta consulta a la función
Busca.

Reynier Perez Mira

unread,
May 19, 2008, 1:29:59 PM5/19/08
to symfo...@googlegroups.com
De la forma que lo tienes creo que esta mal, corríjame alguien si me equivoco. Por mi parte haría algo como esto:

protected function a($sql)
{
// acciones
return $variable; // debe contener lo que necesitas en la otra función
}

public function b()
{
$this->a(); // Tienes lo que retornaste en la función anterior y trabajas con ello en esta función
}
Ing. Reynier Pérez Mira
Grupo Soporte al Desarrollo - Dirección Técnica IP

Richix

unread,
May 19, 2008, 3:03:17 PM5/19/08
to symfony-es
Lo que dice Reynier es correcto, le añadiría que en la funcion b debe
mandarle el parametro... osea $this->a($this->codigo); // Tien...

Pero no entiendo muy bien como quieres manejar esos llamados, por el
ejemplo que colocas creo que no es lo que necesitas.

No deberías estar usando un formulario para este select? o colocar un
observe_field o un formulario ajax que le mande lo del formulario por
parametro a la fución en otro div...

syca

unread,
May 19, 2008, 3:26:27 PM5/19/08
to symfony-es
Hola, lo que pasa es que hago lo siguiente: tengo una tabla de
colonias y otra tabla de calles, entonces enlisto primero las colonias
asi:

En un template que se llama BuscaSuccess.php tengo lo siguiente:

<?php
$c = new Criteria();
$c ->addAscendingOrderByColumn(ColPeer::ID_COLONIA);

echo select_tag('colonia1',
objects_for_select(
ColPeer::doSelect($c),
'getIdColonia',
'__toString',
'getColonia1',$sf_params->get('colonia1') ? '' :
'include_custom=Selecciona una colonia' ,$codigo),
array('size' => '1', 'style' => 'width:
250px','onchange'
=>remote_function(
array('url'=>'contrato/listaCalles','update'=>'select_colonia',

'with'=>"'getIdColonia='+value",'loading'=>"Element.show('indicator');",
'complete'=>"Element.hide('indicator');"))));?>


y al seleccionar una colonia pues manda a llamar a lo siguiente:

este es el template listaCallesSuccess.php

<?php use_helper('Object') ?>
<table><tr><td>
<?php
$c = new Criteria();
$c->add(StreetPeer::ID_COLONIA, $codigo);

echo select_tag('calle1',
objects_for_select(StreetPeer::doSelect($c),'getIdStreet','getNombre'),array('size'
=> '1', 'style' => 'width:265px','include_blank'=>true));
?></td></tr>
</table>

y lo pone en el div:

<div id="select_colonia">

</div>

y tengo un botón buscar:

<?php echo button_to_function('Buscar','mostrar()'); ?>

Y lo que necesito hacer es filtrar por colonia y calle, y de esta
manera obtener datos de otras tablas. Lo que no sé es cómo hacer la
consulta para que me filtre por colonia y calle, porque lo estaba
haciendo así:

$criteria = new Criteria();
$criteria->add(ColPeer::NOMBRE,$this-
>getRequestParameter('colonia1'),Criteria::LIKE);
//$criteria->addAND(StreetPeer::NOMBRE,$this-
>getRequestParameter('calle1'),Criteria::LIKE);
$criteria->addJoin(PRepartoPeer::COLONIA1,ColPeer::ID_COLONIA);
$criteria->addJoin(StreetPeer::ID_COLONIA,ColPeer::ID_COLONIA);
$criteria-
>addJoin(ContratoPeer::ID_PUNTOREPARTO,PRepartoPeer::ID);
$criteria->addJoin(ClientePeer::ID,PRepartoPeer::ID_CLIENTE);
$criteria->addJoin(ContratoPeer::ID_CLIENTE,ClientePeer::ID);
$this->muestras = ContratoPeer::doSelectJoinCliente($criteria);

donde en la primera linea indico que el valor que se selecciona de la
lista lo compare con el dato que está en la tabla Col (colonias), pero
también quiero tomar el valor de la(s) calle(s) que sea seleccionada y
compararlo con el dato que está en la tabla Street.
Pero como a las calles las estoy listando en otro template
listaCallesSuccess.php, no sé como hacer la consulta.
Por eso estaba pensando que primero podría obtener el valor de la
lista de las calles, o sea la calle, en su función:

public function executeListaCalles()
{
$this->codigo = $this->getRequestParameter('getIdColonia');
$consulta = $this->getRequestParameter('calle1');
return $consulta;
}

y luego pasar ese valor que obtuve a la función:

public function executeBusca()
{
// que es aquí donde hago la consulta que mostré anteriormente
}
para de esa forma poder comparar la calle que se seleccionó con el
dato que está en la tabla Street.

La verdad es que aún no he entendido bien symfony, llevo poco tiempo
trabajando con él; y no sé si de la forma que lo estaba pensando hacer
esté bien o mal, o si haya otra forma de hacerlo.

---De antemano gracias por su ayuda---- Saludos =)

Richix

unread,
May 19, 2008, 3:33:26 PM5/19/08
to symfony-es
ok,

yo tendría,

Un indexSucces.php con el formulario de filtrar arriba y un div abajo
que me llame a listarSuccess.php

El index en la accion no tiene nada raro.
El div con el listar pues llama al accion listar y la carga por
remote_function.
El formulario del buscar lo mandaría por submit_to_remote, que
recargue el div de listar.
y ya, el listado ya es el que tu definas pero eso si es personalizar
el criteria y la tabla para mostrar.

syca

unread,
May 19, 2008, 3:40:46 PM5/19/08
to symfony-es
ok, lo intentaré de la manera en la que me dices...

Fernando Toledo

unread,
May 19, 2008, 6:33:19 PM5/19/08
to symfo...@googlegroups.com

class MiClase {

// si en un metodo de la clase asignas una propiedad:
public function a() {
$this->var1 = "hola";
}

// luego desde el otro metodo de la misma clase podes acceder
private function b() {
echo $this->var1;
}
}

--
Dock Sud BBS
http://www.docksud.com.ar
telnet://bbs.docksud.com.ar

signature.asc

sgwd

unread,
May 20, 2008, 7:32:51 AM5/20/08
to symfony-es
syca:
quizas no sea para lo que tu necesitas, ya que no he tenido tiempo de
leer tu codigo.

esta es la manera en la que accedo a funciones dentro de una accion:

class homepageActions extends sfActions
{

public function executeAlgo()
{

...

// si ademas quiero ejecutar el codigo de 'OtraFuncion'
// lo utilizo para reutilizar codigo en varias acciones
homepageActions::otraFuncion();

// si quiero asignar a una variable la ejecucion de la accion
'ObtenerDato'
$tmp = homepageActions::obtenerDato();
// o bien para que este disponible en la plantilla
$this->tmp = homepageActions::obtenerDato();
}

public function otraFuncion()
{
...
}

public function obtenerDato()
{
...
return $dato;
}

}

syca

unread,
May 20, 2008, 1:22:04 PM5/20/08
to symfony-es
Hola Richix: resolví la parte de que me volviera a cargar las calles,
o sea el listarCalles, eso lo hice con el submit_to_remote, y ahora me
quedó así:

En el template BuscaSuccess.php tengo:

<?php echo form_tag('contrato/busca'); ?>
<b>Selecciona Colonia y Calle: &nbsp;</b>
<table>
<tr>
<td align=left>Colonia</td>
<td>
<?php
$c = new Criteria();
$c ->addAscendingOrderByColumn(ColPeer::ID_COLONIA);

echo select_tag('colonia1',
objects_for_select(
ColPeer::doSelect($c),
'getIdColonia',
'__toString',
'getColonia1',$sf_params->get('colonia1') ? '' :
'include_custom=Selecciona una colonia' ,$codigo),
array('size' => '1', 'style' => 'width:
250px','onchange'
=>remote_function(
array('url'=>'contrato/listaCalles','update'=>'select_colonia',

'with'=>"'getIdColonia='+value",'loading'=>"Element.show('indicator');",
'complete'=>"Element.hide('indicator');"))));?>

</td>
<td align=left>Calle</td>
<td>
<div id="select_colonia">
<?php include('listaCallesSuccess.php');?>
</div>
</td>
<td>
<?php if_javascript(); ?>
<?php echo submit_to_remote('busca','Buscar',
array('update'=>'mostrar_datos','url'=>'contrato/busca2'));?>
<?php end_if_javascript(); ?>

<div id=mostrar_datos></div>
Pero ahora este me envía a Busca2Success.php donde se supone que
mostraría el resultado de la búsqueda en el div de arriba.

En la acción:

public function executeBusca(){
//aquí quiero recuperar el dato que se selecciona en el select
Colonia1
$dato=$this->getRequestParameter('colonia1');

return $dato;
}

aquí intenté hacerlo como me dice sgwd de pasar ese valor que recupero
del listado de colonias a la función Busca2

public function executeBusca2()
{
//aqui es donde accedo a ese valor de la funcion Busca
$query = contratoActions::executeBusca($this->dato);

y ese dato lo quiero utilizar en la siguiente consulta:

$criteria = new Criteria();
----> aqui es donde lo utilizo <--- $criteria-
>add(ColPeer::ID_COLONIA,$query,Criteria::LIKE);
$criteria-
>addAND(StreetPeer::ID_COLONIA,ColPeer::ID_COLONIA,Criteria::LIKE);
$criteria->addJoin(PRepartoPeer::COLONIA1,ColPeer::ID_COLONIA);
$criteria->addJoin(StreetPeer::ID_COLONIA,ColPeer::ID_COLONIA);
$criteria-
>addJoin(ContratoPeer::ID_PUNTOREPARTO,PRepartoPeer::ID);
$criteria->addJoin(ClientePeer::ID,PRepartoPeer::ID_CLIENTE);
$criteria->addJoin(ContratoPeer::ID_CLIENTE,ClientePeer::ID);
$this->muestras = ContratoPeer::doSelectJoinCliente($criteria);

}

Pero no me genera nada, porque la variable $dato que le mando en la
funcion Busca y que la recupero en la función Busca2
no está llegando, porque la imprimo en el template y no imprime nada,
entonces no sé donde pueda estar el error.
quizás no estoy mandando correctamente ese valor por eso no me hace
nada, y si es así como puedo recuperar ese valor que mando?

--- Gracias!! saludos.

sgwd

unread,
May 20, 2008, 4:23:52 PM5/20/08
to symfony-es
Hola,

puede que aqui este el problema:

$query = contratoActions::executeBusca($this->dato);

le pasas una variable a la funcion pero la funcion executeBusca() no
toma parametos de entrada

syca

unread,
May 21, 2008, 12:12:06 PM5/21/08
to symfony-es
Muchas gracias!!, eso resolvió el problema.

Bye =)
Reply all
Reply to author
Forward
0 new messages