2010-07-20 32 views
10

Tengo un formulario para el que estoy tratando de establecer la acción. Quiero declarar la acción dentro de mi archivo de formulario (que amplía Zend_Form) en lugar de en un controlador o vista, usando una ruta que he creado en mi arranque. lo general, cuando quiero usar una ruta que hago algo así comoZend Form SetAction usando rutas con nombre

$this->url(array(), 'route-name'); 

en la vista, o

$this->_helper->url(array(), 'route-name'); 

en el controlador.

¿Cómo puedo llamar una ruta desde dentro de Zend_Form?


edición: que han renunciado a tratar de cargar una ruta en Zend_Form. ¿Quizás en una versión futura pueda haber una función para hacer esto fácilmente?

que han creado una viewScript para mi formulario y establezca la ruta en la que: En la función de forma init:

$this->setDecorators(array(
    'PrepareElements', 
     array(
      'ViewScript', array(
        'viewScript' => 'forms/formView.phtml' 
      )))); 

y en el archivo de vista:

<form method="post" action="<?php echo $this->url(array(), 'route-name'); ?>" enctype="application/x-www-form-urlencoded"> 
    <?php 
     foreach ($this->element->getElements() as $element) 
     { 
      echo $element; 
     } 
    ?> 
</form> 
+0

no dé tan rápido. Solo danos el tiempo para responder a tu pregunta;) –

Respuesta

18

Método 1: Obtener el enrutador

// in your form 
public function init() 
{ 
    $router = Zend_Controller_Front::getInstance()->getRouter(); 
    $url = $router->assemble(
     array(
      'paramterName0' => 'parameterValue0', 
      'paramterName1' => 'parameterValue1', 
     ), 
     'routeName' 
    ); 

    $this->setAction($url); 
    ... 
} 

Método 2: Obtenga una instancia del objeto Ver y llame a th e url-vista-helper directamente

// in your form  
public function init() 
{ 
    $url = Zend_Layout::getMvcInstance()->getView()->url(array(), 'routeName'; 
    $this->setAction($url); 
    ... 
} 

prefiero el método 1. Es más prolija, pero usted tiene una dependencia menos en su forma.

+0

El problema con el método uno es que ya tengo las rutas configuradas en el arranque. ¡El método dos es fantástico! –

+0

@Dickie Método 1 no define una nueva ruta. Reúne una URL con una ruta existente. Eche un vistazo en Zend_View_Helper_Url. Hace exactamente lo mismo: obtener el enrutador y llamar a ensamblar. –

+0

Tienes razón. Leí mal el código.Pensé que estaba creando una nueva ruta, sin usar una ruta. Eso es exactamente lo que estoy buscando. Gracias. –

1

si en mi acción del controlador:

$this->view->form = $form; 

usaré url ayudante de vista para generar la URL de acción del formulario en mi script de vista (xxx.phtml):

$url = $this->url(array('controller'=>'my-controller-name', 
        'action'=>'my-action-name'), 
       'my-route-name' 
      ); 

$this->form->setAction($url); 

echo $this->form; 
0

No sé cuando fue agregado, pero hay una solución aún más simple.

Puede recuperar el objeto de vista del formulario con getView(), que tiene acceso a las rutas registradas.

//In the form 
$this->setAction($this->getView()->url(array('param1' => 'value1'), 'routeName')); 
1

Hoy en día se puede acceder a través del objeto Zend_ViewgetView() método de Zend_Form clases:

// init your form  
public function init() 
{ 
    $view = $this->getView(); 
    $url = $view->url(array('module'=>'login','action'=>'login')); 
    $this->setAction($url); 
    ... 
} 

podría esto ayuda en ZF 1.8+

Cuestiones relacionadas