ação conjunto Zend_Form - pode trabalhar w application / Zend construído em subdiretório?

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

Pergunta

Meu aplicativo está sendo construído em um subdiretório do meu servidor local, que é algo como isto:

http://localhost/application/

O problema é que quando eu definir a ação formulário para "/ form / salvar", as rotas do formulário para "localhost / form / salvar", que não existe.

Se eu definir a ação do formulário para "/ aplicativo / form / salvar", eu recebo um erro, porque Zend usa a entrada URL em seu Front_Controller para escolher os módulos, os controladores e ações para uso para solicitações.

Existe uma maneira simples de ter o base_url analisado fora de pedidos? Ele funciona em tudo o mais, exceto para as formas por algum motivo.

Outra alternativa seria ter base_url adicionado a todas as ações de formulário para que seu aplicativo pode trabalhar em ambientes diferentes, e depois tê-lo analisado fora quando a ação for recebida pelo controlador.

Existe uma maneira simples para definir uma variável para fazer algo assim, já embutido no Zend? Se não, qual é a solução?

Eu não consigo encontrar nada de abordar esta questão em qualquer lugar.

Foi útil?

Solução

O problema é causado por incluindo o corte inicial na ação. Quando você colocar um link com um link relativo à raiz, é equivalente a definir um link absoluto, quando a âncora de destino é sob o mesmo nome de domínio. ( "Formulário / / save" é equivalente a " http: // localhost / form / save ").

No seu caso, parece que você precisa adicionar um URL base para a forma, se você quiser enviar os dados para um controlador / ação diferente. Você está usando Zend_Form (certo?), A solução mais elegante seria Zend_Form subclasse, overridding o método setAction() para preceder o seu URL base para cada ação que você definir.

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

Agora, sempre que você cria uma nova forma de My_Form e My_Form::setAction() chamada você terá seu URL base incluído automaticamente.

Espero que isso ajude.

Outras dicas

Você poderia simplesmente deixar o espaço em branco ação e processar os dados do formulário na mesma ação.

Eu sou novo para o Zend Framework, então eu não sei se esta é a melhor solução, mas funciona bem para mim.

Eu usei o seguinte código para definir a ação:

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top