Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal, beleza?
Tenho um pequeno problema e preciso muito da ajuda de vocês.
Montei uma pequena arquitetura (sem muita experiencia) seguindo MVC e ACHO que ficou boa. A minha duvida não é referente a arquitetura, mas sim uma maldita requisição ajax que não funciona. Comentei da arquiteura pois acho que o problema esta em como estou utilizando todos os imports. Para ficar mais claro vou exemplifica:
1) Pagina PHP - a minha view, onde estão dois combos e a instancia do meu controller.
2) Controller - o intermediario entre minhas paginas e services responsável por request e onde é instanciada minha Service.
3) Service - onde eu trato as informações passadas pelo controller e onde é instanciada minha DAO.
**4) AjaxService-** Classe somente para requisicoes ajax, a intenção é que ela chame o service;
**5) DAO -** Classe somente com requisições de banco, insertes e etc(o SQL "puro");
Então minha pagina PHP esta assim:
Cadastro.php
<?
include("controller/CadastroController.php");
$controller = new CadastroController();
$nacionalidade= $controller->getNacionalidade();
?>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/cadastro/cadastro.js"></script>
<div>
<label>NACIONALIDADE:</label>
<? if(count($nacionalidade) > 0){ ?>
<select id="cad_ant_nacionalidade" name="cad_ant_nacionalidade" onchange="javascript:carregaEstados();">
<option/>
<? for($i = 0 ; $i < count($nacionalidade) ; $i++){ ?>
<option value='<?=$i?>'><?echo utf8_encode($nacionalidade[$i]["nome"])?></option>
<? } ?>
</select>
<? } ?>
</div>
<div>
<label>NATURALIDADE:</label>
<select id="cad_ant_naturalidade" name="cad_ant_naturalidade">
<option>Selecione um pais</option>
</select>
</div>
Cadastro.js
Este é meu JavaScript, responsavel pelo onchange do select de nacionalidade:
function carregaEstados(){
$.getJSON('ajaxService/CadastroAjaxService.php?action=buscaEstados',{ idPais : $('#cad_ant_nacionalidade').val(), ajax: 'true'}, function(ret){
var options = '';
if(ret != null){
options = '<option value=""></option>';
for(var i = 0; i < ret.length; i++){
options += '<option value="' + ret[i].id + '">' + ret[i].nome + '</option>';
}
} else {
options += '<option value="0">Sem registros</option>';
}
$('#cad_ant_naturalidade').html(options).show();
});
}
Controller.php
Este é o meu Controller, que se comunica com o Service que por sua vez se comunica com o DAO.
<?
include("service/ResidenciaService.php");
class CadastroController {
//SERVICES
private $residenciaService;
//VAR TELAS
private $naturalidade;
private $nacionalidade;
public function CadastroController(){
$this->residenciaService = new ResidenciaService();
$this->nacionalidade = $this->residenciaService->buscaPaises();
}
public function getNacionalidade(){
return $this->nacionalidade;
}
}
?>
CadastroAjaxService.php
Este é o ajaxService, responsavel somente por requisicoes ajax.
<?
include("../service/ResidenciaService.php");
$residenciaService = new ResidenciaService();
switch($_REQUEST["action"]){
case "buscaEstados" :
$cidades = $residenciaService->buscaEstados($_REQUEST["idPais"]);
echo( json_encode( $cidades ) );
break;
}
?>
ResidenciaDAO.php
Este é o meu DAO, responsavel pelas consultas de banco, mas no momento esta somente retornando um valor "simulado".
<?
class ResidenciaDAO {
function ResidenciaDAO() {
}
function buscaPais(){
$pais[0]["nome"] = "Teste";
$pais[1]["nome"] = "Brasil";
return $pais;
}
function buscaEstados($idPais){
if($idPais == 1){
$estado[0]["nome"] = "SP";
$estado[1]["nome"] = "RJ";
return $estado;
}
return;
}
}
?>
Se quiserem visualizar melhor com estrutura de pastas podem baixar o arquivo aqui: www.lmachado.eti.br/Cadastro.zip
Eu removi tudo referente a banco do meu DAO pra ficar mais facil para visualizar, setei uns arrays na mão e esta funcionando com se tivesse o banco por trás.
O que acontece é que o retorno da minha requisicao ajax esta dando um erro de include no meu DAO:
Warning: include(dao/ResidenciaDAO.php): failed to open stream: No such file or directory in D:\Workspace\apache-httpd\htdocs\Cadastro\service\ResidenciaService.php on line 3
Warning: include(): Failed opening 'dao/ResidenciaDAO.php' for inclusion (include_path='.;C:\php\pear') in D:\Workspace\apache-httpd\htdocs\Cadastro\service\ResidenciaService.php on line 3
Fatal error: Class 'ResidenciaDAO' not found in D:\Workspace\apache-httpd\htdocs\Cadastro\service\ResidenciaService.php on line 9
Se eu alterar os includes da minha classe Residencia Service vai dar pau no meu Controller. Alguem ja teve este tipo de problema? Se teve como burlou?
Se deixar o meu Controler no mesmo diretorio do Cadastro.php funciona bem, mas eu queria deixar ele separado em uma pasta. Pelo que vi o principal problema esta onde o JS chama minha pagina, ele se perde no caminho dos diretorios.
Enfim, se alguem puder me ajudar ficaria muito grato.
Abraço
Agradeço antecipado
Carregando comentários...