Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Hum, legal, Hugo... vou fazer mais testes e aprofundar a respeito dos routes... valeu, cara!
Abraço!!!
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 EncounteredUnable 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'));
}
}É 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!
>
É 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!
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.
1 - Bom, Lumine tem alguns métodos a mais para trabalhar com objetos-relacionais.
Coisas que eu mais acho bacana:
2 - Sim, tem:
3 - Sim. No arquivo "index.php" do CodeIgniter, você tem estas configurações:
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!