Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde!!
Eu tenho o seguinte cenário: Tenho a função X no controller A, que acessa um model e realiza uma função no banco. Porém, tenho outro controller, o controller B. Que executa a função Y. A função Y executa a mesma operação da função X, que é um select. O codeigniter não permite que eu chame a função X no Controller B, até onde sei.
Ai pesquisando, li sobre helper, library, plugin e tal. Tentei fazer isso com o helper, mas o helper não acessa o banco. Library eu n entendi mt bem como funciona, mas vi que é parecido com Helper (que até onde entendi, você coloca funções comuns a varias classes). Minha dúvida é o que uso para chamar a função X, tanto no controller A quanto no controller B de forma que eu não tenha que escrever o mesmo código duas vezes.
Lembrando, essa função X é um select.
Outra coisa tbm, antes que alguem mande o link do manual do codeigniter, eu ja li e lá n esta mt claro, referente a esse meu cenário.
>
Algo está errado aí, a função que você chama nos dois controllers se trata de um método não é mesmo?
Você deve estar separando errado as funcionalidades de cada camada do MVC, essa função (não sei como ela é), mas como faz um SELECT quer dizer que manipula um dado, então deve estar no Model, e esse Model deve ser uma abstração de alguma coisa da vida real, como um log, usuário, cliente ou qualquer outra coisa, então não há limite nenhum em chamar essa função nos dois controllers, se for colocado em model.
Crie um model adequado para a função e chame ela nos controllers, para ficar mais claro para nós entendermos sua questão, coloque um pedaço do seu código.
Boa tarde Everson!
É exatamente isso!! Um método. Por exemplo:
Model
function setor_ativo(){
$this->db->select('*');
$this->db->from('setor');
$this->db->where('statussetor', 'ativo');
$retorno = $this->db->get();
return $retorno;
}
Controller:
function alterar_perfil(){
$this->load->model('usuario/usuario_model');
$variaveis['consulta'] = $consulta = $this->usuario_model->exibe_usuario();
$variaveis['setor_ativo'] = $setor_ativo = $this->usuario_model->setor_ativo();
$this->load->view('perfil_pessoal/perfil_pessoal_view', $variaveis);
}
Tem uma regra, onde só devem ser exibidos os setores que estiverem com status 'Ativo'. Esse mesmo método eu chamo na função listar_usuario(). O que eu qria na vdd era jogar todo esse código que esta dentro da função acima dentro de uma única função e chama-lo tanto na listar_usuario() quanto na alterar_perfil(). Um exemplo, vo fazer usando helper.
function alterar_perfil(){
$this->load->helper('setor/setor_ativo');
}
Algo assim.
Boa tarde, entendi eu acho, mas você pode chamar a função do model em qualquer controller, por exemplo, em cada controller cria um atributo para guardar o model e no construtor atribua o model a esse atributo, exemplo
public $modelUsuario;
public function __construct()
{
$this->modelUsuario = $this->load->model('usuario/usuario_model');
}
E em cada action dos controller chame a função do setor ativo
function alterar_perfil()
{
$setor_ativo = $this->modelUsuario->setor_ativo();
$variaveis['setor_ativo'] = $setor_ativo;
}
function atualizar_perfil() $setor_ativo = $this->modelUsuario->setor_ativo();
$variaveis['setor_ativo'] = $setor_ativo;
}
Não entendi muito bem se é isso que você quer, mas não há problemas em fazer isso
>
Boa tarde, entendi eu acho, mas você pode chamar a função do model em qualquer controller, por exemplo, em cada controller cria um atributo para guardar o model e no construtor atribua o model a esse atributo, exemplo
public $modelUsuario;
public function __construct()
{
$this->modelUsuario = $this->load->model('usuario/usuario_model');
}
E em cada action dos controller chame a função do setor ativo
function alterar_perfil()
{
$setor_ativo = $this->modelUsuario->setor_ativo();
$variaveis['setor_ativo'] = $setor_ativo;
}
function atualizar_perfil() $setor_ativo = $this->modelUsuario->setor_ativo();
$variaveis['setor_ativo'] = $setor_ativo;
}
Não entendi muito bem se é isso que você quer, mas não há problemas em fazer isso
Pô cara, bacana sua solução, apesar da minha duvida n ser essa, eu n conhecia esse método. Já quebra um galhão em n ter q ficar chamando os model td hr rs.
Tipo, oq eu fiz aqui até funcionou, ms creio que n seja tão boa pratica escrever o mesmo código 2, 3, 4 vezes podendo escrever so 1. Eu qria saber, se por exemplo, teria como eu criar uma library ou helper assim:
function minha_library_ou_helper(){
$this->load->model('usuario/usuario_model');
$variaveis['setor_ativo'] = $this->usuario_model->setor_ativo();
return $variaveis['setor_ativo'];
}
E ai dentro da função, que eu chamo na view fica assim:
function alterar_perfil(){
$variaveis = $this->load->library ou helper('minha_library_ou_helper');
//aqui eu só pegaria o retorno da função minha_library_ou_helper e jogaria na view
$this->load->view('perfil_pessoal/perfil_pessoal_view', $variaveis);
}
function teste1(){
$variaveis = $this->load->library ou helper('minha_library_ou_helper');
$this->load->view('teste1/teste1', $variaveis);
}
function teste2(){
$variaveis = $this->load->library ou helper('minha_library_ou_helper');
$this->load->view('teste2/teste2', $variaveis);
}
Eu qria retornar o valor do método do helper ou da library direto para os métodos do controllers, entendeu? Qria saber se isso é possível.
Entendi agora, cara da sim, não é difícil criar um helper no CodeIgniter, faça assim na pasta application/helpers, crie um arquivo php, ele deve ser nesse formato nomehelper_helper.php, dentro dele como exemplo coloque seu código
if (!defined('BASEPATH'))
exit('No direct script access allowed');
if (!function_exists('getSetorAtivo')) {
function getSetorAtivo()
{
$CI = get_instance();
$CI->load->model('usuario_model');
return $CI->usuario_model->setor_ativo();;
}
}
E para chamar ele no controller use
$this->load->helper('nomehelper_helper');
$variavel['setor_ativo'] = getSetorAtivo();>
Entendi agora, cara da sim, não é difícil criar um helper no CodeIgniter, faça assim na pasta application/helpers, crie um arquivo php, ele deve ser nesse formato nomehelper_helper.php, dentro dele como exemplo coloque seu código
if (!defined('BASEPATH'))
exit('No direct script access allowed');
if (!function_exists('getSetorAtivo')) {
function getSetorAtivo()
{
$CI = get_instance();
$CI->load->model('usuario_model');
return $CI->usuario_model->setor_ativo();;
}
}
E para chamar ele no controller use
$this->load->helper('nomehelper_helper');
$variavel['setor_ativo'] = getSetorAtivo();
Éverson, bom dia!
Cara, perfeito, isso mesmo!!! Funcionou redondo. Como eu qria.
Mt obrigado pela ajuda!
>
Entendi agora, cara da sim, não é difícil criar um helper no CodeIgniter, faça assim na pasta application/helpers, crie um arquivo php, ele deve ser nesse formato nomehelper_helper.php, dentro dele como exemplo coloque seu código
if (!defined('BASEPATH'))
exit('No direct script access allowed');
if (!function_exists('getSetorAtivo')) {
function getSetorAtivo()
{
$CI = get_instance();
$CI->load->model('usuario_model');
return $CI->usuario_model->setor_ativo();;
}
}
E para chamar ele no controller use
$this->load->helper('nomehelper_helper');
$variavel['setor_ativo'] = getSetorAtivo();
Cara, esqueci de perguntar uma coisa, tem como chamar o helper direto na view ou um método qualquer?
Cara, esqueci de perguntar uma coisa, tem como chamar o helper direto na view ou um método qualquer?
Cara, esquece, já descobri como faz kkkkkkkkk valeu!!
Algo está errado aí, a função que você chama nos dois controllers se trata de um método não é mesmo?
Você deve estar separando errado as funcionalidades de cada camada do MVC, essa função (não sei como ela é), mas como faz um SELECT quer dizer que manipula um dado, então deve estar no Model, e esse Model deve ser uma abstração de alguma coisa da vida real, como um log, usuário, cliente ou qualquer outra coisa, então não há limite nenhum em chamar essa função nos dois controllers, se for colocado em model.
Crie um model adequado para a função e chame ela nos controllers, para ficar mais claro para nós entendermos sua questão, coloque um pedaço do seu código.