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 ?
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:
[list=1]
[*]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?
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?
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:
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"?