Zend_Form set action - Può funzionare con l'applicazione Zend integrata nella sottodirectory?

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

Domanda

La mia applicazione è stata creata in una sottodirectory del mio server locale, che assomiglia a questa:

http://localhost/application/

Il problema è che quando imposto l'azione del modulo su " / form / save " ;, il modulo si dirige verso " localhost / form / save " ;, che non esiste.

Se imposto l'azione del modulo su " / application / form / save " ;, viene visualizzato un errore, poiché Zend utilizza l'input dell'URL nel suo Front_Controller per selezionare i moduli, i controller e le azioni da utilizzare per le richieste.

C'è un modo semplice per far analizzare base_url dalle richieste? Funziona su tutto il resto tranne che per le forme per qualche motivo.

Un'altra alternativa potrebbe essere l'aggiunta di base_url a tutte le azioni del modulo in modo che l'applicazione possa funzionare in ambienti diversi e che venga analizzata quando l'azione viene ricevuta dal controller.

C'è un modo semplice per impostare una variabile per fare qualcosa del genere, già integrata in Zend? In caso contrario, qual è la soluzione?

Non riesco a trovare nulla che affronti questo problema da nessuna parte.

È stato utile?

Soluzione

Il problema è causato dall'inclusione della barra iniziale nell'azione. Quando si imposta un collegamento con un collegamento relativo alla radice, equivale a impostare un collegamento assoluto, quando l'ancoraggio di destinazione si trova con lo stesso nome di dominio. (" / form / save " equivale a " http: // localhost / form / save " ).

Nel tuo caso, sembra che sia necessario aggiungere un URL di base al modulo, se si desidera inviare i dati a un controller / azione diverso. Stai utilizzando Zend_Form (giusto?), La soluzione più elegante sarebbe quella di sottoclassare Zend_Form , scavalcando il metodo setAction () per anteporre il tuo URL di base per ogni azione impostata.

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).
    }        
}

Ora ogni volta che crei un nuovo modulo da My_Form e chiami My_Form :: setAction () avrai automaticamente incluso l'URL di base.

Spero che questo aiuti.

Altri suggerimenti

Potresti semplicemente lasciare vuota l'azione ed elaborare i dati del modulo nella stessa azione.

Sono nuovo di Zend Framework, quindi non so se questa sia la soluzione migliore, ma funziona bene per me.

Ho usato il seguente codice per impostare l'azione:

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top