Yii Framework Forum: Problemas Ao Usar $_Get - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problemas Ao Usar $_Get Erro no $_GET[ ] dentro da action para pegar valor dentro da view Rate Topic: -----

#1 User is offline   Deadbody 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 02-October 12

Posted 11 November 2012 - 08:37 AM

Ola! Estou com alguns problemas para usar formulários na view configurados como:
<?php $form=$this->beginWidget('CActiveForm', array(
	'action'=>Yii::app()->createUrl($this->route),
	'method'=>'get',
)); ?>


A seguinte mensagem de erro está sendo mostrada:
PHP notice

Undefined index: opcoes_busca

C:\Program Files (x86)\EasyPHP-12.1\www\Empresa\protected\controllers\ClienteController.php(202)

Ela está sendo mostrada quando eu clico no botão Clientes em meu menu principal:
<div id="mainmenu">
		<?php $this->widget('zii.widgets.CMenu',array(
			'items'=>array(
				array('label'=>'Clientes', 'url'=>array('/cliente/index')),
				),
		)); ?>
	</div><!-- mainmenu -->


Na minha view há um dropDownList com as opções de busca e um TextField para inserir um valor da busca. No meu Controler na action index o código é esse:
public function actionIndex(){            
    $cliente=new Cliente('search');
    $tipo=$_GET['opcoes_busca'];

    switch ($tipo){
    case 1:
        $cliente->nome=$_GET['valor_busca'];
        break;
    case 2:
        $cliente->cpf=$_GET['valor_busca'];
        break;
    case 3:
        $cliente->razao_social=$_GET['valor_busca'];
        break;
    case 4:
        $cliente->cnpj=$_GET['valor_busca'];
        break;
    default:                
        $cliente->unsetAttributes();
    }

    $this->render('index',array(
                'dataProvider'=>$cliente->search(),
                'cliente'=>$cliente,
        ));
}

Alguém tem idéia do porque dá esse erro? Posso estar errado, mas acho que tem alguma coisa relacionada com a url, pois quando eu comento as partes do código que possuem $_GET[] e clico no menu, ele funciona corretamente, depois, já dentro da pagina cliente/index eu descomento o código e tento fazer uma busca usando o formulário, ele faz ela direitinho e se nesse mesmo momento eu clico no botão Clientes do menu principal ele mostra o erro novamente. Algém pode me ajudar ?
0

#2 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 824
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 11 November 2012 - 12:45 PM

Deadbody,

Esse erro e do PHP, deve está configurado para mostrar que uma váriavel não foi inicializada.

Faz assim:
$tipo = isset($_GET['opcoes_busca']) ? $_GET['opcoes_busca'] : '';

Newerton Vargas de Araújo
0

#3 User is offline   Deadbody 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 02-October 12

Posted 13 November 2012 - 06:21 AM

Newerton,

Eu fiz a alteração que você sugeriu e realmente funcionou, obrigado. Mas eu preciso entender algumas questões sobre o erro. Com as alterações o código ficou assim:

Controller(Cliente)/Action(index):
public function actionIndex(){
    $cliente=new Cliente('search');
    $tipo = isset($_GET['opcoes_busca']) ? $_GET['opcoes_busca'] : '';
    if($tipo!=''){
    switch ($tipo){
    case 1:
        $cliente->nome=$_GET['valor_busca'];
        break;
    case 2:
        $cliente->cpf=$_GET['valor_busca'];
        break;
    case 3:
        $cliente->razao_social=$_GET['valor_busca'];
        break;
    case 4:
        $cliente->cnpj=$_GET['valor_busca'];
        break;
    default:
        $cliente->unsetAttributes();
    }
}

    $this->render('index',array(
                'dataProvider'=>$cliente->search(),
                'cliente'=>$cliente,
        ));
}

Bom, vamos as dúvidas:
  • A minha view index possui um renderPartial de uma página chamada _search que contém um formulário, então após o carregamento eu tenho o formulário de busca da página _search e um CListView na mesma página,certo?

  • Quando ela é apresentada pela primeira vez não da pra fazer $_get nesse momento pois todos os campos estão vazios, por isso a função isset() para ver se o campo está vazio, certo?

  • Quando eu clico no botão de busca('submit'), ele atualiza a página e executa a action index novamente ?

  • Usando script em Jquery que usa ajax para executar essa busca(aquele mesmo gerado automaticamente pelo gii que fica na view admin.php, "Advantage search") também atualiza a página toda, o que acontece por traz de fato?


Desde já agradeço...
0

#4 User is offline   Newerton 

  • Master Member
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 824
  • Joined: 27-April 10
  • Location:Campo Grande/MS - Cambé/PR, Brasil

Posted 13 November 2012 - 06:44 AM

Deadbody,

A minha view index possui um renderPartial de uma página chamada _search que contém um formulário, então após o carregamento eu tenho o formulário de busca da página _search e um CListView na mesma página,certo?
Certo.

Quando ela é apresentada pela primeira vez não da pra fazer $_get nesse momento pois todos os campos estão vazios, por isso a função isset() para ver se o campo está vazio, certo?
Certo, nos parametros do php.ini tem o error_reporting, que deve está definido para mostrar as váriaveis não inicializada. Mais isso não impende do funcionamento do sistema.

Quando eu clico no botão de busca('submit'), ele atualiza a página e executa a action index novamente ?
Correto.

Usando script em Jquery que usa ajax para executar essa busca(aquele mesmo gerado automaticamente pelo gii que fica na view admin.php, "Advantage search") também atualiza a página toda, o que acontece por traz de fato?
Na verdade ele não atualiza a página toda, ele atualiza somente o CListView, e que você alterou o actionIndex do padrão, e deve ser por isso que ele está atualizando a página, por que não usa o index padrão, por que você criou aquele switch?
Newerton Vargas de Araújo
0

#5 User is offline   Deadbody 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 02-October 12

Posted 02 December 2012 - 11:44 AM

Newerton,

Eu alterei o actionIndex padrão pois tive de incluir uma lógica de busca que inclui um switch para capturar o tipo de busca escolhido pelo usuário para somente após procurar o valor solicitado:

<?php
Yii::app()->clientScript->registerScript('trocar_tipo_pessoa_cliente', "


$('body').on('change', 'select#opcoes_busca', function(){
        var id = $(this).val();
		if(id != 0){                           
                    $('#valor_busca').removeAttr('disabled');                 
                   
		}else{
                    $('#valor_busca').attr('disabled','disabled');
                }
});
$('#resetar').click(function(){
    $('#valor_busca').attr('disabled','disabled');
    $('#valor_busca').val('');
    $('#opcoes_busca').attr('selected',0);
    location.reload();

	
	}
);
");
?>

<b>Busca de clientes</b><br/>
<hr/>

<div class="form">

<?php
$form = $this->beginWidget('CActiveForm', array(
    'action' => Yii::app()->createUrl($this->route),
    'method' => 'get',
        ));
?>
    <div style="float: left;padding: 0 10px 0 0; position: relative">
        <?php
        $opcoes_busca = array(
            0 => 'Selecione',
            1 => 'Nome',
            2 => 'CPF',
            3 => 'Razão Social',
            4 => 'CNPJ'
        );
        ?>
        <?php echo CHtml::label(CHtml::encode('Tipo de busca'), 'opcoes_busca'); ?>
        
        <?php
        echo CHtml::dropDownList('opcoes_busca', '', $opcoes_busca, array(
            'id' => 'opcoes_busca',
            'options' => array(0 => array('selected' => 'selected')),
        ));
        ?>
    </div>
    <div style="float: left;padding: 0 10px 0 0; position: relative">
        <?php echo CHtml::label(CHtml::encode('Valor procurado'), 'valor_busca'); ?>
        <?php
        echo CHtml::textField('valor_busca', '', array(
            'id' => 'valor_busca',
            'disabled' => 'disabled'
        ));
        ?> 
    </div>
    <div style="float: left;padding-top:17px; position: relative">
<?php echo CHtml::submitButton('Pesquisar'); ?>
<?php echo CHtml::resetButton('Limpar', array('id' => 'resetar')); ?>
    </div>
    <div style="clear: left"></div>
<?php $this->endWidget(); ?>


Na view há um combobox com os tipos de busca e um campo para inserir o valor para a busca. Gostaria de saber se há alguma forma mais interessante de criar essa busca.
Uma outra questão que me ocorreu, nessa minha solução para a busca os tipos de busca são 4 atributos diferentes do mesmo model "Cliente", o controlador que estou trabalhando agora é o ClienteController. A forma como modelei: um "Cliente::model()" possui um "Endereco::model()" que por sua vez possui um "Municipio::model()". Se eu incluisse na minha logica de busca a opção de busca por cidade, como eu faria para esse "model->serch()" retornar Objetos "Cliente"?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users