Zend_Form set action: ¿puede funcionar con la aplicación Zend integrada en el subdirectorio?

StackOverflow https://stackoverflow.com/questions/1640738

Pregunta

Mi aplicación se está creando en un subdirectorio de mi servidor local, que se parece a esto:

http://localhost/application/

El problema es que cuando configuro la acción del formulario en '' / form / save '', el formulario se enruta a '' localhost / form / save '', que no existe.

Si configuro la acción del formulario en " / application / form / save " ;, obtengo un error, porque Zend usa la entrada URL en su Front_Controller para elegir los módulos, Controladores y Acciones que se usarán para las solicitudes.

¿Hay una manera simple de analizar el base_url de las solicitudes? Funciona en todo lo demás, excepto los formularios por alguna razón.

Otra alternativa sería agregar base_url a todas las acciones del formulario para que su aplicación pueda funcionar en diferentes entornos y luego analizarla cuando el controlador reciba la acción.

¿Hay una manera simple de establecer una variable para hacer algo como esto, ya integrado en Zend? Si no, ¿qué es una solución?

Parece que no puedo encontrar nada que aborde este problema en ninguna parte.

¿Fue útil?

Solución

El problema se debe a la inclusión de la barra diagonal inicial en la acción. Cuando establece un enlace con un enlace relativo a la raíz, es equivalente a establecer un enlace absoluto, cuando el ancla de destino está bajo el mismo nombre de dominio. (" / form / save " es equivalente a " http: // localhost / form / save " ).

En su caso, parece que necesita agregar una URL base al formulario, si desea enviar los datos a un controlador / acción diferente. Está utilizando Zend_Form (¿verdad?), La solución más elegante sería la subclase Zend_Form , anulando el método setAction () para anteponer su URL base para cada acción que establezca.

class My_Form extends Zend_Form
{
    ...
    public function setAction($action)
    {
        $baseAction = rtrim($this->_getBaseUrl(),'/') . $action;  // Will remove a slash from the end of the base URL, so form actions start with a slash.

        parent::setAction($baseAction);
    }

    private function _getBaseUrl()
    {
        // Retrive your base url from somewhere (config might be a good place).
    }        
}

Ahora, cada vez que cree un nuevo formulario desde My_Form y llame a My_Form :: setAction () , su URL base se incluirá automáticamente.

Espero que esto ayude.

Otros consejos

Puede dejar la acción en blanco y procesar los datos del formulario en la misma acción.

Soy nuevo en Zend Framework, así que no sé si esta es la mejor solución, pero funciona bien para mí.

Utilicé el siguiente código para configurar la acción:

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top