CodeIgniter: Criar novo auxiliar?

178

Preciso fazer um loop de muitas matrizes de maneiras diferentes e exibi-las em uma página. As matrizes são geradas por uma classe de módulo. Eu sei que é melhor não incluir funções em 'views' e quero saber onde inserir o arquivo de funções.

Sei que posso 'estender' os ajudantes, mas não quero estender um ajudante. Eu quero criar um ajudante com minhas funções de loop. Vamos chamá-lo de loops_helper.php

Jonathan
fonte
Por que você não pode simplesmente passar essas matrizes para a exibição?
Mike Hordecki
Eu posso, mas que perde o ponto de sepparating a vista das funções ..
Jonathan

Respostas:

378

Um auxiliar do CodeIgniter é um arquivo PHP com várias funções. Não é uma classe

Crie um arquivo e coloque o seguinte código nele.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

if ( ! function_exists('test_method'))
{
    function test_method($var = '')
    {
        return $var;
    }   
}

Salve isso em application / helpers / . Vamos chamá-lo de "new_helper.php"

A primeira linha existe para garantir que o arquivo não possa ser incluído e executado fora do escopo do CodeIgniter. Tudo depois disso é auto-explicativo.

Usando o Auxiliar


Isso pode estar no seu controlador , modelo ou visualização (não é preferível)

$this->load->helper('new_helper');

echo test_method('Hello World');

Se você usar esse auxiliar em vários locais, poderá carregá-lo automaticamente adicionando-o ao arquivo de configuração de carregamento automático, por exemplo <your-web-app>\application\config\autoload.php.

$autoload['helper'] = array('new_helper');

-Mathew

The Pixel Developer
fonte
33
Sempre use o nome do arquivo auxiliar como "_helper", caso contrário, você receberá um erro. Portanto, "helper_name" não funcionará, mas nomeie seu arquivo "name_helper".
Bhumi Singhal
3
No CI2, você também precisará obter a instância do IC para usar um auxiliar dentro de um modelo: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob
3
Apenas uma observação: o ajudante não precisa ser uma função. Também pode ser uma aula. Por exemplo, confira a estratégia para criar "Widgets" no Fórum do EllisLab . Em seguida, você pode usar essa classe em qualquer lugar ... também, tecnicamente, você pode carregar seu auxiliar na instância de IC, se desejar obtendo a instância e definindo $thiscomo uma propriedade dela ... Tudo, se você quiser.
General Redneck
2
Para que serve a verificação if function_exists? É uma coisa de ignitor de código, é uma coisa geral de boas práticas de php? Por que você precisaria disso?
skrln
2
@skrln há uma chance de você ter um ajudante carregado automaticamente (vamos chamá-lo cool_helper) e, se você esquecer disso e ligar manualmente $this->load->helper('cool_helper')depois que ele foi carregado automaticamente, você receberá um erro PHP "já definido" ou algo assim. Isso impede o carregamento do mesmo código duas vezes (é algo como a include_once()função PHP, mas para os auxiliares do CodeIgniter, para evitar problemas). Basicamente, traduzindo um pouco: se a função não existe, significa que o auxiliar não foi carregado antes. Vamos definir isso.
Alejandro Iván
79

Algum código que permite usar a instância do IC dentro do auxiliar:

function yourHelperFunction(){
    $ci=& get_instance();
    $ci->load->database(); 

    $sql = "select * from table"; 
    $query = $ci->db->query($sql);
    $row = $query->result();
}
r4ccoon
fonte
1
@ r4ccoon, tão certo. Nem me levou 5 minutos para voltar para as definições da instância. :)
user1048839
@ r4ccoon, e isso é uma dica fantástica
Arun
17

Bem, para mim só funciona adicionando o texto "_helper"depois no arquivo php como:

Ajudantes do Codeiginiter

E para carregar automaticamente o auxiliar na pasta aplication -> file autoload.php, adicione o nome do auxiliar no array sem "_helper" como:

$ autoload ['helper'] = array ('comunes');

E com isso eu posso usar todas as funções do ajudante

Eduardo Chavira
fonte
1
Acabei de descobrir que, como você disse, o CodeIgniter exigirá _helperno final do nome do arquivo.
Jared Eitnier
@ Jared, sim, também foi o meu caso, requer o _helper no final do nome do arquivo!
pollux1er
11

Para criar um novo auxiliar, você pode seguir as instruções do The Pixel Developer , mas meu conselho é não criar um auxiliar apenas para a lógica exigida por uma parte específica de um aplicativo específico. Em vez disso, use essa lógica no controlador para definir as matrizes para seus valores finais pretendidos. Depois de obtê-lo, você os passa para a view usando a classe Template Parser e (espero) você pode manter a view limpa de qualquer coisa que se pareça com o PHP usando variáveis ​​simples ou pares de tags variáveis ​​em vez de ecos e foreachs. ou seja:

{blog_entries}
<h5>{title}</h5>
<p>{body}</p>
{/blog_entries}

ao invés de

<?php foreach ($blog_entries as $blog_entry): ?>
<h5><?php echo $blog_entry['title']; ?></h5>
<p><?php echo $blog_entry['body']; ?></p>
<?php endforeach; ?>

Outro benefício dessa abordagem é que você não precisa se preocupar em adicionar a instância do IC, como faria se usasse ajudantes personalizados para fazer todo o trabalho.

Lima
fonte
3

Crie um arquivo com o nome do seu ajudante em / application / helpers e adicione-o ao arquivo de configuração de carregamento automático / carregue-o manualmente.

Por exemplo, coloque um arquivo chamado user_helper.php em / application / helpers com este conteúdo:

<?php
  function pre($var)
  {
    echo '<pre>';
    if(is_array($var)) {
      print_r($var);
    } else {
      var_dump($var);
    }
    echo '</pre>';
  }
?> 

Agora você pode carregar o auxiliar via $this->load->helper(‘user’);ou adicioná-lo ao aplicativo / config / autoload.php config.

Sumit
fonte
3

Basta definir um auxiliar no diretório auxiliar do aplicativo e chamar do seu controlador apenas o nome da função como

helper name = new_helper.php
function test_method($data){
 return $data
}   

no controlador carregar o ajudante

$this->load->new_helper();
$result =  test_method('Hello world!');
if($result){
 echo $result
}

saída será

Hello World!
Khurshid Alam Jony
fonte
3

Para recuperar um item do seu arquivo de configuração, use a seguinte função:

$this->config->item('item name'); Onde o nome do item é o índice da matriz $ config que você deseja recuperar. Por exemplo, para buscar sua escolha de idioma, faça o seguinte:

$lang = $this->config->item('language'); A função retornará FALSE (booleano) se o item que você está tentando buscar não existir.

Se você estiver usando o segundo parâmetro da função $ this-> config-> load para atribuir seus itens de configuração a um índice específico, poderá recuperá-lo especificando o nome do índice no segundo parâmetro do $ this-> config- > função item (). Exemplo:

// Carrega um arquivo de configuração chamado blog_settings.php e o atribui a um índice chamado "blog_settings"

$this->config->load('blog_settings', TRUE);

// Recupera um item de configuração chamado site_name contido na matriz blog_settings

$site_name = $this->config->item('site_name', 'blog_settings');

// Uma maneira alternativa de especificar o mesmo item:

$blog_config = $this->config->item('blog_settings');

$ site_name = $ blog_config ['site_name'];

user6280268
fonte