Foros del Web » Programando para Internet » PHP » Zend »

problemas al devolver Isvalid de un Zend_Form

Estas en el tema de problemas al devolver Isvalid de un Zend_Form en el foro de Zend en Foros del Web. Proyecto/application/forms/LoginForm.php Código PHP: class  Application_Form_LoginForm  extends  Zend_Form {     public function  init ()     {          $username  = new  Zend_Form_Element_Text ( 'username' );          $username -> setLabel ( 'Username:' ...
  #1 (permalink)  
Antiguo 25/08/2011, 11:59
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
problemas al devolver Isvalid de un Zend_Form

Proyecto/application/forms/LoginForm.php
Código PHP:
class Application_Form_LoginForm extends Zend_Form
{

    public function 
init()
    {
        
$username = new Zend_Form_Element_Text('username');
        
$username->setLabel('Username:')
                 ->
setRequired(true)
                 ->
setAttrib('id''username')
                 ->
addValidator('NotEmpty'true)
                 ->
addValidator('alnum')
                 ->
setDecorators(array(
                     array(
'ViewHelper',
                           array(
'helper' => 'formText')),
                     array(
'Label',
                           array(
'class' => 'label'))
                 ));

        
$password = new Zend_Form_Element_Password('password');
        
$password->setLabel('Contraseña:')
                 ->
setRequired(true)
                 ->
setAttrib('id''password')
                 ->
addValidator('NotEmpty'true)
                 ->
setDecorators(array(
                     array(
'ViewHelper',
                           array(
'helper' => 'formPassword')),
                     array(
'Label',
                           array(
'class' => 'label'))
                 ));

        
$submit = new Zend_Form_Element_Submit('Entrar');
        
$submit->setAttrib('id''submitbutton')
               ->
setDecorators(array(
                   array(
'ViewHelper',
                   array(
'helper' => 'formSubmit'))
               ));
        
        
$this->setMethod('post');
        
$this->setAction('security/login');
        
$this->addElements(array($username,$password,$submit));
    }

Proyecto/application/controllers/IndexController.php
Código PHP:
class IndexController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
$form = new Application_Form_LoginForm();
        
$request $this->getRequest();
        
$form->isValid($request->getPost());
        
$this->view->form $form;
    }
    

Proyecto/application/controllers/SecurityController.php
Código PHP:
class SecurityController extends Zend_Controller_Action
{

    public function 
init()
    {
        
/* Initialize action controller here */
    
}

    public function 
indexAction()
    {
        
// action index
    
}
      
    public function 
loginAction()
    {    
        
        
$request $this->getRequest();
        if (!
$request->isPost()) {
            return 
$this->_helper->redirector('index','index');
        }
        
        
$form = new Application_Form_LoginForm();
           if(!
$form->isValid($request->getPost())):
               
$this->view->form $form;
            return 
$this->_helper->redirector('index','index');
        endif;
        
        
$modelSecurity = new Application_Model_Security();
        
        
$username $this->_getParam('username');
        
$password $this->_getParam('password');
        
        if(
$modelSecurity->validarUsuario($username$password)):
            return 
$this->_helper->redirector(indexuser);
        endif;
            
        return 
$this->_helper->redirector('index','index');
    }
    
    public function 
logoutAction()
    {
        
Zend_Auth::getInstance()->clearIdentity();
        
$this->_helper->redirector('index','index'); 
    }
        

Proyecto/application/models/Security.php
Código PHP:
class Application_Model_Security
{
    public function 
validarUsuario($username$password) {
        
    
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
        
$authAdapter->setTableName('users')
                    ->
setIdentityColumn('username')
                    ->
setCredentialColumn('password');
        
$authAdapter->setIdentity($username)
                    ->
setCredential($password);
        
        
//$select = $authAdapter->getDbSelect ();

        
$auth Zend_Auth::getInstance ();
        
$result $auth->authenticate($authAdapter);
        if(
$result->isValid()) :
                    
            return 
true;
            
        endif;
        
        return 
false;
    }

Proyecto/application/views/scrpits/index/index.phml
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4.   <title>Proyecto</title>
  5.   <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Cantarell|Philosopher|Copse"></link>
  6.   <link href="css/index_style.css" type="text/css" rel="stylesheet">
  7.   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript" ></script>
  8. </head>
  9.     <hgroup>
  10.         <h1>Proyecto</h1>
  11.     </hgroup>
  12. </header>    
  13.     <h2 class="left-only">Login</h2>
  14.      <?php
  15.     echo $this->form;
  16.      ?>  
  17. </body>
  18. </html>

El problema es cuando le doy entrar al boton. el realiza bien todas las validaciones.
pero no esta devolviendo los mensajes de las validaciones del Zend_Form.
Soy un poco nuevo en esto y no he podido solucionar ese detalle.

Última edición por ApipeMc; 25/08/2011 a las 12:21
  #2 (permalink)  
Antiguo 25/08/2011, 12:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: problemas al devolver Isvalid de un Zend_Form

El problema es que estas redirigiendo al validar, eso causa que los errores se borren ya que cambias el scope de la petición http.

Lo que tienes que hacer es validar en el mismo request para que puedas ver los errores, puedes hacer algo así:
Código PHP:
Ver original
  1. $form = new Application_Form_LoginForm();
  2.            if(!$form->isValid($request->getPost())) {
  3.                $this->view->form = $form;
  4.                $this->renderScript('index/index.phtml');
  5.                return;
  6.            }

Saludos.
  #3 (permalink)  
Antiguo 25/08/2011, 13:08
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

si al darle un redirect se pierde los datos, y pues que yo sepa el render solo se delvuelve en el mismo controlador.

el cambio. pero lo que sucedio fue lo siguiente
http://localhost/proyecto/public/security/login

me cargo el formulario en esta direccion y tampoco saco error de validator del zend_form.
  #4 (permalink)  
Antiguo 25/08/2011, 13:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 6 meses
Puntos: 1517
Respuesta: problemas al devolver Isvalid de un Zend_Form

¿Pero volviste a redirigir? Porque siempre que redirijas se va a perder los datos de los errores.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 25/08/2011, 13:36
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

Si quite la parte de la redirección. En el controlador.

Código PHP:
Ver original
  1. class SecurityController extends Zend_Controller_Action
  2. {
  3.  
  4.     public function init()
  5.     {
  6.         /* Initialize action controller here */
  7.     }
  8.  
  9.     public function indexAction()
  10.     {
  11.         // action index
  12.     }
  13.      
  14.     public function loginAction()
  15.     {    
  16.        
  17.         $request = $this->getRequest();
  18.         if (!$request->isPost()) {
  19.             return $this->_helper->redirector('index','index');
  20.         }
  21.        
  22.         $form = new Application_Form_LoginForm();
  23.         if(!$form->isValid($request->getPost())) {
  24.             $this->view->form = $form;
  25.             $this->renderScript('index/index.phtml');
  26.             return;
  27.         }
  28.        
  29.         $modelSecurity = new Application_Model_Security();
  30.        
  31.         $username = $this->_getParam('username');
  32.         $password = $this->_getParam('password');
  33.        
  34.         if($modelSecurity->validarUsuario($username, $password)):
  35.             return $this->_helper->redirector(index, user);
  36.         endif;
  37.            
  38.         return $this->_helper->redirector('index','index');
  39.     }
  40.    
  41.     public function logoutAction()
  42.     {
  43.         Zend_Auth::getInstance()->clearIdentity();
  44.         $this->_helper->redirector('index','index'); // back to login page
  45.     }
  46.        
  47. }
  #6 (permalink)  
Antiguo 25/08/2011, 13:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 6 meses
Puntos: 1517
Respuesta: problemas al devolver Isvalid de un Zend_Form

Debes indicar en el setDecorators, los errors, algo como
Código PHP:
Ver original
  1. //....
  2. ->setDecorators(
  3.     array(
  4.         array('ViewHelper', array('helper' => 'formText')),
  5.         array('Label', array('class' => 'label')),
  6.         'Errors',
  7.     )
  8. )
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 25/08/2011, 14:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

ApipeMc deberías refactorizar, porque la ensalada de redirector's ?, con algo así es suficiente:

Código PHP:
Ver original
  1. public function loginAction()
  2. {        
  3.     $form = new Application_Form_LoginForm();
  4.     if($this->_request->isPost()
  5.             && $form->isValid($this->_request->getPost())) {
  6.         $modelSecurity = new Application_Model_Security();  
  7.         $values = $form->getValues();
  8.         if($modelSecurity->validarUsuario($values['password'], $values['username'])){
  9.             return $this->_helper->redirector('index', 'user');
  10.         }
  11.     }    
  12.     $this->view->form = $form;
  13. }

Y la sintaxis alternativa la deberías restringir a los templates únicamente.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #8 (permalink)  
Antiguo 25/08/2011, 14:10
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

Gracias No sabia esa parte del decorator.!
El siguiente el problema es que con el renderscript
Zend_form se esta pintado en la siguiente direccion: http://localhost/proyecto/public/security/login

y deberia carga en la de siempre que seria la siguiente direccion

http://localhost/proyecto/public/

Aca dejo los ejemplos:
http://localhost/proyecto/public/security/login


http://localhost/proyecto/public/index
  #9 (permalink)  
Antiguo 25/08/2011, 14:17
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

Es porque estas tirando el post a otro action, debería estar todo en el mismo lugar.
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 25/08/2011, 14:17
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 6 meses
Puntos: 1517
Respuesta: problemas al devolver Isvalid de un Zend_Form

Es por el setAction que lo estás enviando a esa dirección y como no lo estás redirigiendo entiende que debe mostrar los errores en el mismo lugar. En realidad no te debería importar las direcciones que salen en la barra de navegación. Eso es algo que tu debes saber, al cliente eso no lo va a importar.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #11 (permalink)  
Antiguo 25/08/2011, 14:38
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

Cree un controlador solo para la parte de seguridad.
y tenia el controller index para lo del login.
Entonces no puedo devolver ese IsValid que esta en SecurityController a IndexController
que es donde tengo el login
  #12 (permalink)  
Antiguo 25/08/2011, 14:48
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

Cual es el sentido de tener un controlador solo para presentar un formulario ?, el formulario deberías presentarlo y tratarlo en /security/login
__________________
http://es.phptherightway.com/
thats us riders :)
  #13 (permalink)  
Antiguo 25/08/2011, 14:53
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

Cita:
Iniciado por masterpuppet Ver Mensaje
Cual es el sentido de tener un controlador solo para presentar un formulario ?, el formulario deberías presentarlo y tratarlo en /security/login
No ya entendi. lo siento fue una pregunta muy estupida jajaja.
solo solo le cambie el setAction cuando no cumpla condicion del Isvalid.
Código PHP:
$form = new Application_Form_LoginForm();
        if(!
$form->isValid($request->getPost())) {
            
$form->setAction('');
            
$this->view->form $form;
            
$this->renderScript('index/index.phtml');
            return;
        } 
Tengo es problema con el css no me quiere coger la ruta o como resuelvo eso.
  #14 (permalink)  
Antiguo 25/08/2011, 14:56
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 6 meses
Puntos: 1517
Respuesta: problemas al devolver Isvalid de un Zend_Form

Tampoco hace sentido el que no declares el setAction. El setAction debe siempre tener el mismo valor que vas a usar para enviar el formulario. Lo del CSS es solo indicar ruta absoluta del archivo, ejemplo, cuando lo declares lo puedes llamar usando el / al principio y luego indicar la ruta desde el public por ejemplo. O usar
Código PHP:
Ver original
  1. $this->headLink()->appendStylesheet('/style.css');
en el view.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #15 (permalink)  
Antiguo 25/08/2011, 15:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: problemas al devolver Isvalid de un Zend_Form

Debes de entender que los controladores son entidades, yo lo que haría en tu caso es que el SecurityController fuera el encargado de mostrar el form de login y validar, y que tu IndexController revise solamente si hay o no una sesión (aunque eso deberías de hacerlo con un plugin por ejemplo).

Saludos.
  #16 (permalink)  
Antiguo 25/08/2011, 15:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

Por portabilidad siempre se deberia utilizar el baseUrl, algo así:

Código PHP:
Ver original
  1. $this->headLink()->appendStylesheet($this->baseUrl('/style.css'));

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #17 (permalink)  
Antiguo 25/08/2011, 15:05
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

es que cuando el login se pinta en el
http://localhost/proyecto/public/security/login
y el zend_form y el setAction tiene /security/login
entonces cuando le dan entra en esa vista se dirige a
http://localhost/proyecto/public/sec...security/login
y pinta es una pagina blanca.
  #18 (permalink)  
Antiguo 25/08/2011, 15:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 10 años, 6 meses
Puntos: 1517
Respuesta: problemas al devolver Isvalid de un Zend_Form

Ahora entro yo, pero ¿que diferencia hace?, ya que verifiqué y me trae lo mismo que lo ingresara directo

Edito:
Bueno creo que entiendo, ¿es por si se usa setBaseUrl?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #19 (permalink)  
Antiguo 25/08/2011, 15:12
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

@ApipeMc, tienes que anteponer la "/"

Código PHP:
Ver original
  1. ...
  2. $this->setAction('/security/login');
  3. ...

@abimael, la diferencia esta en que lo haces portable, si por alguna razón tenes que cambiar el baseUrl te dejaria de funcionar (yo lo aprendí por las malas).
__________________
http://es.phptherightway.com/
thats us riders :)
  #20 (permalink)  
Antiguo 25/08/2011, 15:14
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

si con el baseUrl no me quiere coger el css el view.

Código HTML:
$this->headLink()->appendStylesheet($this->baseUrl('/style.css'));
  #21 (permalink)  
Antiguo 25/08/2011, 15:19
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

Y la ruta es correcta ? tienes el css suelto en el root del site ?
__________________
http://es.phptherightway.com/
thats us riders :)
  #22 (permalink)  
Antiguo 25/08/2011, 15:26
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

la estructura es la siguiente
proyecto/
application/
docs/
library/
public/
css/
index_style.css
layout_style.css
image/
image/

Asi es como tengo la estructura que tengo.
  #23 (permalink)  
Antiguo 25/08/2011, 15:27
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

Cita:
Iniciado por masterpuppet Ver Mensaje
@ApipeMc, tienes que anteponer la "/"

Código PHP:
Ver original
  1. ...
  2. $this->setAction('/security/login');
  3. ...

@abimael, la diferencia esta en que lo haces portable, si por alguna razón tenes que cambiar el baseUrl te dejaria de funcionar (yo lo aprendí por las malas).
Cita:
Iniciado por masterpuppet Ver Mensaje
Y la ruta es correcta ? tienes el css suelto en el root del site ?
si pongo el / en el zend_from
me redirge a http://localhost/security/login
  #24 (permalink)  
Antiguo 25/08/2011, 15:27
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 11 años, 11 meses
Puntos: 845
Respuesta: problemas al devolver Isvalid de un Zend_Form

En ese caso, no seria algo asi ?

Código PHP:
Ver original
  1. $this->headLink()->appendStylesheet($this->baseUrl('/css/layout_style.css'));
__________________
http://es.phptherightway.com/
thats us riders :)
  #25 (permalink)  
Antiguo 25/08/2011, 16:19
Avatar de ApipeMc  
Fecha de Ingreso: septiembre-2010
Ubicación: Medellín, Antioquia, Colombia
Mensajes: 76
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: problemas al devolver Isvalid de un Zend_Form

Listo me quedo muy claro todo. Y ya quedo todo funcional. Gracias a todos por su colaboración y paciencia.

Etiquetas: frameworks-y-php-orientado-a-objetos, isvalid, zen_form, validador, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:35.