Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Julio Andolfo

Formulário SELECT !

Recommended Posts

Tenho esse formulário criado :

 

$filtro = new Zend_Form_Element_Select('campoFiltro');
       $filtro->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))
              ->setMultiOptions(array('condominio' => 'Condomínio',
                                      'morador'    => 'Morador'))

              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');

 

Gostaria desde formulário SELECT só que pegando :

 

->setMultiOptions(array('condominio' => 'Condomínio',
                                      'morador'    => 'Morador'))

 

Ao invés de listar o que coloco no array, quero listar do banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de saber se isso daqui funcionaria :

 

$filtro = new Zend_Form_Element_Select('campoFiltro');
       $filtro->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))
              ->setMultiOptions(array('key' => 'id','value' => 'country_name'))

              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de saber se isso daqui funcionaria :

 

Não. Você quer popular o formulário com dados vindo do banco de dados, certo? Para isto, você deve utilizar o Model que você quer utilizar. Imaginando que seja o model condominio:

 

$model = new Model_Condominio();
$filtro = new Zend_Form_Element_Select('campoFiltro');
       $filtro->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))                                                                           
              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');
foreach($model->fetchAll() as $item) {

$filtro->addMultiOption($item->id, $item->nome);
}

 

Onde id e nome são os nomes dos campos na tabela.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado até agora, mas tive um pequeno problema em minha página :

 

Warning: include_once(Model\Condominio.php) [function.include-once]: failed to open stream: No such file or directory in C:\Vision\library\Zend\Loader.php on line 146

 

Warning: include_once() [function.include]: Failed opening 'Model\Condominio.php' for inclusion (include_path='C:\Vision\application/../library;C:\Vision\application/models;C:\Vision\library;.;C:\xampp\php\PEAR') in C:\Vision\library\Zend\Loader.php on line 146

 

Fatal error: Class 'Model_Condominio' not found in C:\Vision\library\App\Forms\Default\Consulta\Form.php on line 24

Compartilhar este post


Link para o post
Compartilhar em outros sites

Significa que o arquivo Model_Condominio não foi encontrado. Verifique o nome da classe Model que você quer utilizar, porque não é este.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é meu formulário completo, no qual estou tentando inserir mais essa função :

 

<?php

class App_Forms_Default_Consulta_Form extends Zend_Form
{
   public function init()
   {
       $busca = new Zend_Form_Element_Text('campoBusca');
       $busca->setLabel('Consulta:')
             ->removeDecorator('Label')
             ->removeDecorator('HtmlTag');

       $filtro = new Zend_Form_Element_Select('campoFiltro');
       $filtro->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))
              ->setMultiOptions(array('condominio' => 'Condomínio',
                                      'morador'    => 'Morador'))

              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');

       //formulario de escolher condominios

      $model = new listaCondominio();
$filtro = new Zend_Form_Element_Select('campoFiltro');
       $filtro->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))                                                                           
              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');
foreach($model->fetchAll() as $item) {

$filtro->addMultiOption($item->id, $item->nome);
}


//fim do formulario de escolher condominios




       //botao conultar
       $submit = new Zend_Form_Element_Submit('btnSubmeter');
       $submit->setLabel('Consultar')
              ->removeDecorator('Label')
              ->setAttrib('class', 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only')
              ->removeDecorator('HtmlTag')
              ->removeDecorator('DtDdWrapper');

       //configuracao
       $this->setMethod('post')
            ->setAction('')
            ->setAttrib('id', 'formCondominio')
            ->addElements(array($busca,
                                $filtro,
                                $submit));
   }
}

 

Bom, acho que estamos quase lá, não tenho palavras para agradecer, mas tenho mais um erro aqui :

 

Message: SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

 

Stack trace:

 

#0 C:\Vision\library\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)

#1 C:\Vision\library\Zend\Db\Adapter\Abstract.php(479): Zend_Db_Statement->execute(Array)

#2 C:\Vision\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array)

#3 C:\Vision\library\Zend\Db\Adapter\Abstract.php(753): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Select), Array)

#4 C:\Vision\application\models\Condominio.php(38): Zend_Db_Adapter_Abstract->fetchRow(Object(Zend_Db_Select))

#5 C:\Vision\library\App\Forms\Default\Consulta\Form.php(31): Condominio->listaCondominios()

#6 C:\Vision\library\Zend\Form.php(240): App_Forms_Default_Consulta_Form->init()

#7 C:\Vision\application\modules\default\controllers\ConsultaController.php(18): Zend_Form->__construct()

#8 C:\Vision\library\Zend\Controller\Action.php(513): Default_ConsultaController->indexAction()

#9 C:\Vision\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction')

#10 C:\Vision\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))

#11 C:\Vision\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()

#12 C:\Vision\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()

#13 C:\Vision\public\index.php(26): Zend_Application->run()

#14 {main}

Request Parameters:

 

array (

'controller' => 'consulta',

'action' => 'index',

'module' => 'default',

)

Compartilhar este post


Link para o post
Compartilhar em outros sites

FORM.PHP :

 

<?php

class App_Forms_Default_Consulta_Form extends Zend_Form
{
   public function init()
   {
       $busca = new Zend_Form_Element_Text('campoBusca');
       $busca->setLabel('Consulta:')
             ->removeDecorator('Label')
             ->removeDecorator('HtmlTag');

       $filtro = new Zend_Form_Element_Select('campoFiltro');
       $filtro->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))
              ->setMultiOptions(array('condominio' => 'Condomínio',
                                      'morador'    => 'Morador'))

              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');

       //formulario de escolher condominios

      $model = new Condominio();
$filtro2 = new Zend_Form_Element_Select('campoFiltro2');
       $filtro2->setLabel('Filtro: ')
              ->setRequired()
              ->addValidator('NotEmpty', false, array('messages'=>'Campo obrigatório!'))                                                                           
              ->removeDecorator('Label')
              ->removeDecorator('HtmlTag');
foreach($model->listaCondominios() as $item) {

$filtro2->addMultiOption($item->Con_ID, $item->Con_Nome);
}


//fim do formulario de escolher condominios




       //botao conultar
       $submit = new Zend_Form_Element_Submit('btnSubmeter');
       $submit->setLabel('Consultar')
              ->removeDecorator('Label')
              ->setAttrib('class', 'ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only')
              ->removeDecorator('HtmlTag')
              ->removeDecorator('DtDdWrapper');

       //configuracao
       $this->setMethod('post')
            ->setAction('')
            ->setAttrib('id', 'formCondominio')
            ->addElements(array($busca,
                                $filtro,
                                $submit));
   }
}

 

INDEX DO FORM :

 

<fieldset>
       <label for="campoBusca">
           <?=$this->formConsulta->campoBusca->getLabel();?>
           <?if($this->formConsulta->campoBusca->isRequired()){echo"*";}?>
       </label>
       <?=$this->formConsulta->campoBusca;?>
       <br />
       <label for="campoFiltro">
           <?=$this->formConsulta->campoFiltro->getLabel();?>
           <?if($this->formConsulta->campoFiltro->isRequired()){echo"*";}?>
       </label>

       <?=$this->formConsulta->campoFiltro;?>
	<br />

	<label for="campoFiltro2">
           <?=$this->formConsulta->campoFiltro2->getLabel();?>
           <?if($this->formConsulta->campoFiltro2->isRequired()){echo"*";}?>
       </label>

       <?=$this->formConsulta->campoFiltro2;?>
	<br />


<br />
       <?=$this->formConsulta->btnSubmeter;?>
   </fieldset>
   </div>
</form>

 

MODEL :

 

public function listaCondominios($grupo)
   {
       $db = Zend_Registry::get('db');

       $query = $db->select()
                    ->from($this->_tabelaNivel,array('Nivel_ID','Nivel_Nome','Nivel_Parent'))
                    ->where('Nivel_ID = ?',$grupo);
       $nivel = $db->fetchRow($query);
       if ($nivel['Nivel_Parent'] == 0) {
           $query = $db->select()
                       ->from($this->_tabela)
                       ->join($this->_tabelaNivel. ' AS apv','Con_Apv = apv.Nivel_ID')
                       ->join($this->_tabelaNivel. ' AS dpv','dpv.Nivel_ID = apv.Nivel_Parent');
       } else {
           $query = $db->select()
                       ->from($this->_tabelaNivel,array('Nivel_ID','Nivel_Nome','Nivel_Parent'))
                       ->where('Nivel_ID = ?',$nivel['Nivel_Parent']);
           $nivel2 = $db->fetchRow($query);
           if ($nivel2['Nivel_Parent'] == 0) {
               $query = $db->select()
                           ->from($this->_tabela)
                           ->join($this->_tabelaNivel,'Con_Apv = Nivel_ID')
                           ->where('Nivel_Parent = ? ',$grupo);
           } else {
               $query = $db->select()
                           ->from($this->_tabela)
                           ->join($this->_tabelaNivel. ' AS apv','Con_Apv = apv.Nivel_ID')
                           ->where('Con_Apv = ? ',$grupo);
           }
       }
       $this->_listaCondominios = $db->fetchAll($query);
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui:

 

>where('Nivel_ID = ?',$grupo);

 

Você tem que passar alguma coisa aqui. Olha a chamada do método:

 

public function listaCondominios($grupo)

 

Ou seja, aqui:

 

foreach($model->listaCondominios() as $item) {

 

Você tem que modificar, passando este Nivel_Id por parâmetro. Depois disto deve continuar não funcionando, mas o erro deve ser um warning do foreach, porque o método listaCondominios() não retorna nada. Depois que aparecer o erro que eu falei, poste a classe Condominio (model) completa.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpa a amolação, mas no caso para passar como parâmetro como posso fazer ?

 

vou ter que modificar aqui ?

 

>where('Nivel_ID = ?',$grupo);

 

ou aqui :

 

foreach($model->listaCondominios() as $item) {

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui:

 

foreach($model->listaCondominios() as $item) {

 

Definitivamente você precisa estudar PHP básico antes de pegar qualquer outro projeto com o ZF. Depois de aprender PHP básico, você deve procurar entender os conceitos de Orientação a objetos e MVC, porque as suas dúvidas são coisas básicas demais.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa, mas é que não era dessa área, meu negócio é Produção Gráfica, mas o único jeito de eu ir realmente atras de aprender a programar, é pegando projetos, assim é um desafio para mim praticar, ^^, desculpa ficar incomodando, mas é que eu sei o que você quis dizer, mas não posso simplismente passar um parâmetro da forma PHP puro, tenho que fazer isso com Zend e isso que me enrosca, obrigado.

 

Para recuperar o Nivel_ID por parametro utilizo :

 

$this->_request->getParam("id");

 

Devo usar :

 

$this->_forward(‘Action’, ‘controller’, ‘module’, ‘params’);

 

no meu model ?

 

isso é correto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Devo usar :

 

$this->_forward(‘Action’, ‘controller’, ‘module’, ‘params’);

 

no meu model ?

 

isso é correto ?

Não.

 

$id = $this->_request->getParam("id");

$id aqui recebe o valor de algum parâmetro passado com o nome id, como por exemplo um valor passado pela URL (GET). Algo assim:

 

www.site.com.br/noticias/ver/id/23

 

Dentro do controller noticias, da action ver, se você colocar o código acima $id receberá o valor 23.

 

O código serve também para capturar dados enviados por um formulário, onde 'id' é o nome do campo do formulário.

 

Captou a ideia?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, intendo, aqui para mim está pedindo o seguinte :

 

Request Parameters:

 

array (

'controller' => 'consulta',

'action' => 'index',

'module' => 'default',

)

 

 

 

Isso seria somente um parametro, ou os 3 ?

 

seria mais o menos isso ? :

 

foreach($model->listaCondominios() as $item) {
$params = $this->getRequest()->getParams('Nivel_ID');
$filtro2->addMultiOption($item->Con_ID, $item->Con_Nome);
}

 

obrigado !

 

Certo, conseguimos corrigir usando :

 

$param = $this->getRequest()->getParam('Con_Apv');
foreach($model->listaCondominios($param) as $item) {
$filtro2->addMultiOption($item->Con_ID, $item->Con_Nome);

 

Mas agora me da esse erro :

 

Message: Method getRequest does not exist

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você esta usando o método getRequest dentro de um form ?

 

Se estiver isso não vai funcionar por que a class getRequest é uma herança do Zend_Controller_Action.

 

Para resolver isso você pode estar criando um método exemple:

 


private $_condApv;

public function setConApv($valor)
{
   $this->_condApv = $valor;
}

public function getConApv()
{
   return $this->_condApv;
}


public function init()
{
.......


$param = $this->getConApv();
foreach($model->listaCondominios($param) as $item) {
$filtro2->addMultiOption($item->Con_ID, $item->Con_Nome);

.....
}

 

 


$form = new Class_Do_Meu_Formulario();
$form->setConApv($this->getRequest()->getParam('Con_Apv'));

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

 

E você set o seu request quando você criar a instancia do formulário!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.