Ir para conteúdo

POWERED BY:

Arquivado

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

MIX VIRTUAL

Estrutura CODE IGNITER

Recommended Posts

Estou estudando o Code Igniter e como sei que você tem experiência com esse framework em seus projetos, gostaria de tirar umas dúvidas.

 

1) Qual a vantagem de utilizar o Lumine, ao invés de utilizar a classe Database do próprio CI?

 

2) Verifiquei que no CI existe a classe Active Record:

 

Active Record Insert

$data = array(

'title' => $title,

'name' => $name,

'date' => $date

);

 

$this->db->insert('mytable', $data);

 

// Produces: INSERT INTO mytable (title, name, date) VALUES ('{$title}', '{$name}', '{$date}')

Eu consigo fazer esse tipo de inserção utilizando o Lumine?

 

 

3) Esta é a última, rsrsrsr:

É uma dúvida voltada ao próprio CI e sua estrutura. Eu utilizo o Lumine no diretório protegido (a raiz), para ficar mais seguro e a estrutura de pastas não ficar pública (public_html).

No caso do Code Igniter eu consigo fazer isso? Colocar ele no nível abaixo do meu diretório público?

No meu server local aqui (Zend Core) eu uso a seguinte estrutura:

 

htdocs/

lumine/

projeto1/ ==> "chamo" o Lumine para este projeto

projeto2/ ==> "chamo" o Lumine para este projeto

 

No caso do CI, eu preciso copiar a estrutura dele para cada projeto?

Ou consigo utilizar apenas uma pasta CI para todos os projetos, pois sei que nele existem os arquivos config.php e database.php, além dos views e controllers.

 

Exemplo:

 

htdocs/

lumine/

codeigniter/

projeto1/ ===> "chamo" o Lumine e CodeIgniter para este projeto

projeto2/ ===> "chamo" o Lumine e CodeIgniter para este projeto

 

 

Não sei se fui claro, mas acho que dá pra entender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - Bom, Lumine tem alguns métodos a mais para trabalhar com objetos-relacionais.

Coisas que eu mais acho bacana:

  • o mapeamento já fica na própria classe
  • os joins ficam mais fáceis
  • tem métodos para faciliar a persistencia e recuperação
  • método de validação nativo
  • emula prepared statement (WHERE a.nome like ? OR a.codautor = ?)

 

2 - Sim, tem:

$pessoa = new Pessoa();
$pessoa->setFrom($_POST);
$pessoa->save();

 

3 - Sim. No arquivo "index.php" do CodeIgniter, você tem estas configurações:

 

$system_folder = "system";
$application_folder = "application";

 

Basta definir onde estarão estes diretórios (que não precisam estar publicos) e pronto ;)

Mas lembre-se, suas imagens, CSS, JS, etc (assets carregados pelo navegador) precisarão estar em um diretório público.

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, Hugo, tudo bem?

 

Continuo meus testes com o Code Igniter e Lumine.

 

Referente a seu exemplo na página de integração do Lumine e CI:

http://www.hufersil.com.br/post/lumine_com_codeigniter

 

A chamada ao objeto (tabela), no caso, deve ser sempre dessa maneira?

Sempre utiliza o dao pra conectar a classe da tabela que foi gerada?

TabelaModel::getInstance()->save( $dados );

 

Em qualquer ação (insert,update,select...) eu devo usar o TabelaModel::getInstance() ou invés de $tabela = new Tabela()?

 

Desculpe a pergunta "tosca", mas é que já estava acostumado a trabalhar com as classes/tabelas.

 

Uma outra dúvida:

 

Segui sua página de config Lumine/CI:

Basta informar no arquivo "/www/exemplos/ci/system/application/config/autoload.php" para carregar automaticamente a biblioteca "Lumine_ApplicationContext". Para isso, altere a linha onde está:

$autoload['libraries'] = array();

Para isto:

$autoload['libraries'] = array('Lumine_ApplicationContext');

 

Pra você entender minha estrutura de pasta:

MEU CI =========================> D:/projetos/htdocs/teste_ci

MEU LUMINE =====================> D:/projetos/htdocs/lumine

lumine-conf.php ================> D:/projetos/htdocs/teste_ci/lumine-conf.php

Lumine_ApplicationContext.php ==> D:\projetos\htdocs\teste_ci\system\application\libraries\Lumine_ApplicationContext.php

autoload.php ===================> D:\projetos\htdocs\teste_ci\application\config\autoload.php

 

Não joguei o Lumine dentro do CI, como você indicou. O LUMINE está no mesmo nível do CI e quero chamar ele dentro do CI.

 

htdocs/

teste_ci/

lumine/

 

Eu gerei os models/daos pela página do Lumine e já estão nas pastas indicadas no CI.

Eu desmarquei a opção "Personalização -> Usar controles usando: Não gerar controles". Tem algum problema?

 

Verifiando sua página de config Lumine/CI:

Não existe a pasta 'system/application/config'. É necessário criar uma pasta config e criar outro 'autoload.php'? Ou usar aquele 'autoload.php' que já está em 'application/config'?

 

Pois fazendo do jeito que está descrito, está dando erro:

An Error Was Encountered

Unable to load the requested class: lumine_applicationcontext

 

Eu posso usar caminho absoluto (DOCUMET_ROOT) para os arquivos abaixo?

 

autoload.php:

$autoload['libraries'] = array('database','parser','Lumine_ApplicationContext');

 

lumine-conf.php::

$lumineConfig = array(
   'dialect' 		=> 'MySQL', 
   'database' 		=> 'teste_codeigniter', 
   'user' 		=> 'root', 
   'password' 		=> '1234', 
   'port' 		=> '3306', 
   'host' 		=> 'localhost', 
   'class_path' 	=> 'D:/projetos/htdocs/teste_ci', //======> local onde está meu CI e o lumine-conf.php
   'package' 		=> 'system.application.models.dao', 
   'addons_path' 	=> '', 
   'acao' 		=> 'gerar', 


   'options' => array(
       'configID' 			=> 'ci', 
       'tipo_geracao' 			=> '1', 
       'remove_prefix' 		=> '', 
       'remove_count_chars_start' 	=> '0', 
       'remove_count_chars_end' 	=> '0', 
       'format_classname' 		=> '', 
       'schema_name' 			=> '', 
       'many_to_many_style' 		=> '%s_%s', 
       'plural' 			=> '', 
       'create_controls' 		=> '', 
       'class_sufix' 			=> '', 
       'keep_foreign_column_name' 	=> '1', 
       'camel_case' 			=> '1', 
       'usar_dicionario' 		=> '1', 
       'create_paths' 			=> '1', 
       'dto_format' 			=> '%sDTO', 
       'dto_package' 			=> 'entidades', 
       'create_models' 		=> '1', 
       'model_path' 			=> 'system/application/models', 
       'model_format' 			=> '%sModel', 
       'model_context' 		=> '1', 
       'model_context_path' 		=> 'system/application/libraries', 
       'overwrite' 			=> '0', 
       'create_dtos' 			=> '', 
       'generateAccessors' 		=> '', 
       'create_entities_for_many_to_many' => '', 
       'generate_files' 		=> '1', 
       'generate_zip' 			=> '0'
   )
);

 

 

Lumine_ApplicationContext.php:

// inclui os arquivos necessarios
require_once $_SERVER['DOCUMENT_ROOT'] . '/lumine/Lumine.php';

class Lumine_ApplicationContext extends Lumine_EventListener {

/**
 * Construtor
 * 
 * @author Hugo Ferreira da Silva
 * @link http://www.hufersil.com.br
 * @return Lumine_ApplicationContext
 */
public function __construct(){

	include $_SERVER['DOCUMENT_ROOT'] . '/teste_ci/lumine-conf.php';
	$cfg = new Lumine_Configuration($lumineConfig);

	register_shutdown_function(array($cfg->getConnection(),'close'));
	spl_autoload_register(array('Lumine','import'));
	spl_autoload_register(array('Lumine','loadModel'));

}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que no exemplo, criei também as Models pelo Lumine.

Estas models tratam os objetos gerados pelo Lumine como DAO.

 

Caso queira usar os objetos gerados, não tem problema nenhum.

É só uma questão de gosto.

 

Eu acho que encapsular os objetos DAO para serem usados somente dentro das Models mais correto.

Assim, a controller somente recebe/envia valores do/para o Front-End, deixando a lógica de negócio dentro da Model.

 

@braços e fique com Deus!

 

1 - não, não precisa gerar os "controles". São somente para scaffold;

2 - a classpath indica o diretório raiz de onde estarão as classes que serão usadas pelo Lumine.

Se você colocar a class path como /www/meusite e o pacote (package) como br.com.hufersil.models Lumine vai procurar pelas classes no diretorio /www/meusite/br/com/hufersil/models

 

Não existe a pasta 'system/application/config'

Pode ser por conta da versão do seu CI.

Na mais nova, vai ser application/config

 

Como você mudou a estrutura de diretórios, não esqueça de no Lumine_ApplicationContext.php fazer apontar o caminho correto do arquivo lumine-conf.php

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que no exemplo, criei também as Models pelo Lumine.

Estas models tratam os objetos gerados pelo Lumine como DAO.

 

Caso queira usar os objetos gerados, não tem problema nenhum.

É só uma questão de gosto.

 

Eu acho que encapsular os objetos DAO para serem usados somente dentro das Models mais correto.

Assim, a controller somente recebe/envia valores do/para o Front-End, deixando a lógica de negócio dentro da Model.

 

@braços e fique com Deus!

 

1 - não, não precisa gerar os "controles". São somente para scaffold;

2 - a classpath indica o diretório raiz de onde estarão as classes que serão usadas pelo Lumine.

Se você colocar a class path como /www/meusite e o pacote (package) como br.com.hufersil.models Lumine vai procurar pelas classes no diretorio /www/meusite/br/com/hufersil/models

 

 

Pode ser por conta da versão do seu CI.

Na mais nova, vai ser application/config

 

Como você mudou a estrutura de diretórios, não esqueça de no Lumine_ApplicationContext.php fazer apontar o caminho correto do arquivo lumine-conf.php

 

@braços e fique com Deus!

 

Ah, ok, Hugo... agora foi... realmente era versão, pois acho que mudou a estrutura de pastas, e na página de geração do Lumine, ele já "pré-preenche"( ;) ) o diretório system.application.models.dao.

 

Sobre o encampsulamento, questão de performance e consumo de memória, é melhor dessa forma ou usar os objetos diretamente?

Como se utiliza o destroy() no encapsulamento, após terminar de usar o objeto?

 

Valeu demais, e desculpe te incomodar aí no sabadão, rsrsrs.

 

Abraço e fique com Deus também!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo, boa noite.

No seu post anterior você falou sobre usar o encapsulamento no Lumine/CI.

Será que você podia me passar alguns exemplos de select, update e loop, pois estou tendo algumas dúvidas.

Pode ser coisa simples. Outra coisa também é em relação a performance e utilização do destroy().

 

 

Desculpe a amolação.

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.