kalua 0 Denunciar post Postado Junho 1, 2015 Olá a todos Eu estou utilizando o recurso __autoload para carregar as minha classes automaticamente, mas embora exista algumas classes, e por mais que elas estejam com suas nomeclaturas do jeito e tal e tal, o bendito do __autoload nao quer carregar-las de jeito nenhum, confesso que estou perdendo a paciência, mas se alguém tiver alguma luz ai pra dar, eu ficaria bem mais aliviado, desde já agradeço a helps!! Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Junho 1, 2015 De uma olhada no post abaixo. http://forum.imasters.com.br/topic/537233-problema-com-autoload-simples/?p=2145510 Ou adapte fazendo algumas alterações. <?php /** * My SPL autoloader. * @param string $classname The name of the class to load */ function MyAutoload($classname) { //Can't use __DIR__ as it's only in PHP 5.3+ $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; if (is_readable($filename)) { require $filename; } } if (version_compare(PHP_VERSION, '5.1.2', '>=')) { //SPL autoloading was introduced in PHP 5.1.2 if (version_compare(PHP_VERSION, '5.3.0', '>=')) { spl_autoload_register('MyAutoload', true, true); } else { spl_autoload_register('MyAutoload'); } } else { /** * Fall back to traditional autoload for old PHP versions * @param string $classname The name of the class to load */ function __autoload($classname) { MyAutoload($classname); } } Compartilhar este post Link para o post Compartilhar em outros sites
TheNight 1 Denunciar post Postado Junho 1, 2015 isso funciona que é uma beleza! toma ! <?php function __autoload($ClassName) { if (file_exists(dirname(__DIR__) . DIRECTORY_SEPARATOR . 'modules/class' . DIRECTORY_SEPARATOR . $ClassName . '.class.php')) { require_once (dirname(__DIR__) . DIRECTORY_SEPARATOR . 'modules/class' . DIRECTORY_SEPARATOR . $ClassName . '.class.php'); } else { die('Erro ao incluir a classe <strong>' . $ClassName.'.class.php </strong>'); } } Obs: leia o código e altere os diretórios! Compartilhar este post Link para o post Compartilhar em outros sites
Luis Paullo 47 Denunciar post Postado Junho 2, 2015 Composer Não perca tempo com autoload deixa o trabalho duro para um gerenciador de pacotes! E foque no que realmente importa na sua app (as regras de negocio). Compartilhar este post Link para o post Compartilhar em outros sites
kalua 0 Denunciar post Postado Junho 2, 2015 O que eu não consigo entender é a lógica do porque não está incluindo esta classe, por mais que ela exista o erro que aparece é Class 'EmailModel' not found e isso é bem estranho e esta tirando minha paz, se alguem por favor tiver alguma explicação de onde eu estou errando, por favor nao deixe de compartilhar, eu gostaria de entender o conceito do porque nao está funcionando, e se é por falta de detalhes então ai vai mais detalhes: Eu tenho uma função __autoload em um arquivo config.php em um diretório acima das minhas classes, ou seja, eu tenho diretório classes contendo todas as minhas classes, inclusive a classe em questão. O autoload está assim: function __autoload($class) { if (file_exists(dirname(__DIR__) . DS . 'app' . DS . 'classes' . DS . $class . '.php')) : require_once dirname(__DIR__) . DS . 'app' . DS . 'classes' . DS . $class . '.php'; else : die('Erro ao incluir classe <strong>' . $class . '</strong>'); endif; } E a minha classe EmailModel.php está definida assim: <?php class EmailModel extends Model { //put your code here ... Desde já agradeço a atenção de todos, livrem-me desta aflição :cry:, é muito chato acontencer um problema e vc nao saber o pq deste problema!! Compartilhar este post Link para o post Compartilhar em outros sites
Viiiniii 15 Denunciar post Postado Junho 2, 2015 Uma coisa que sempre faço quando algo não funciona é verificar o que esta sendo retornado, tente dar um echo nessa parte : dirname(__DIR__) . DS . 'app' . DS . 'classes' . DS . $class . '.php' e veja o que esta retornando para voce Compartilhar este post Link para o post Compartilhar em outros sites
kalua 0 Denunciar post Postado Junho 2, 2015 Cara por encrivel que pareça, está dando o caminho da classe certinho, mas php está considerando como se o nome do arquivo não fosse o mesmo nome da classe, o que não é verdade, o arquivo é chamado EmailModel.php e a classe chama-se EmailModel. E mesmo assim se o caminho estivesse errado, ele deveria cair no die(), mas nem isso acontece!!! Mas obrigado pela ajuda Compartilhar este post Link para o post Compartilhar em outros sites
Viiiniii 15 Denunciar post Postado Junho 2, 2015 Posta o arquivo você esta chamando a classe EmailModel Na caso da extends model, voce esta incluindo a classe model do arquivo ? Esta usando bootstrap para fazer as chamadas do arquivos ? Compartilhar este post Link para o post Compartilhar em outros sites
kalua 0 Denunciar post Postado Junho 2, 2015 Galera consegui resolver misteriosamente!! Falo misteriosamente pq nao o pq disso q eu fiz, é o seguinte: Eu tinha uma classe MailHandler sendo instanciada antes de EmailModel, o que acontecia era que toda classe que o PHP tentava executar depois dessa MailHandler não era reconhecida como classe. O que eu fiz foi fazer toda a operação com banco de dados antes do envio de email, a deu certo, as classes que dependem este processo foram incluidas e executadas certinho, agora nao me perguntem o pq isso aconteceu, eu ainda nao conheço alguma regra que fale algo sobre isto, mas enfim consegui resolver, estou 70% satisfeito, e 30% insatisfeito por não saber o porque isso aconteceu!!! Mas vlw ai força galera. Ficou assim depois de resolvido: if ($_SERVER['REQUEST_METHOD'] == 'POST') : foreach ($_POST as $key => $value) : $_POST[$key] = htmlspecialchars($value); endforeach; extract($_POST); if ($_SESSION['token'] == $token) : //Inserindo no banco de dados. $model = $this->model('email'); $model->setEmail($email); if (!$model->emailExists()) : $model->setNome($nome); if (!$model->insert()) : $this->set('alert', array('type' => 'alert', 'message' => 'Ocorreu algum erro na inserção no banco de dados!')); endif; endif; //Enviando o email com a requisição. $mail = new MailerHandler('rbr26.dizinc.com', 465, 'contato@igrejasdc.com.br', '1020304050'); $mail->setToName('kaluanbentes@gmail.com', 'Igreja SDC'); $mail->setNome($nome); $mail->setEmail($email); $mail->setAssunto('Quero receber o CD da Família'); $mail->setMenssagem( '<p><b>Nome:</b> ' . $nome . '</p>' . '<p><b>Email:</b> ' . $email . '</p>' . '<p><b>Telefone:</b> ' . $telefone . '</p>' . '<p><b>Celular:</b> ' . $celular . '</p>' . '<p><b>Endereço:</b> ' . $endereco . '</p>' . '<p><b>Cidade:</b> ' . $cidade . '</p>' . '<p><b>Estado:</b> ' . $estado . '</p>' . '<p><b>CEP:</b> ' . $cep . '</p>' ); if ($mail->sendEmail()) : $_SESSION['token'] = hash('sha512', rand(100, 1000)); $this->set('alert', array('type' => 'success', 'message' => 'A sua requisição foi enviada com sucesso!')); else : $this->set('alert', array('type' => 'alert', 'message' => $mail->getError())); endif; else : $this->set('alert', array('type' => 'alert', 'message' => 'Token invalido! <a href="index.php">Recarregue a página</a>')); endif; endif; Compartilhar este post Link para o post Compartilhar em outros sites