CodeIgniter: creare un nuovo aiutante?


178

Devo eseguire il loop di molti array in diversi modi e visualizzarli in una pagina. Le matrici sono generate da una classe di moduli. So che è meglio non includere le funzioni nelle "viste" e voglio sapere dove inserire il file delle funzioni.

So di poter "estendere" gli helper, ma non voglio estendere un aiuto. Voglio in qualche modo creare un aiuto con le mie funzioni di loop. Chiamiamolo loops_helper.php


Perché non puoi semplicemente passare quegli array alla vista?
Mike Hordecki,

Posso, ma questo manca il punto di separare la vista dalle funzioni ..
Jonathan,

Risposte:


378

Un helper CodeIgniter è un file PHP con più funzioni. Non è una classe

Crea un file e inserisci il seguente codice.

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

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

Salvalo nell'applicazione / helper / . Lo chiameremo "new_helper.php"

La prima riga esiste per assicurarsi che il file non possa essere incluso ed eseguito dall'ambito di CodeIgniter. Tutto ciò che segue è autoesplicativo.

Usando l'helper


Questo può essere nel tuo controller , modello o vista (non preferibile)

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

echo test_method('Hello World');

Se si utilizza questo helper in molte posizioni, è possibile caricarlo automaticamente aggiungendolo al file di configurazione del caricamento automatico, ad es <your-web-app>\application\config\autoload.php.

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

-Mathew


33
Usa sempre che il nome del file helper sia aggiunto con "_helper", altrimenti otterrai un errore. Quindi "helper_name" non funzionerà ma dai un nome al tuo file "name_helper".
Bhumi Singhal,

3
A partire da CI2, dovrai anche ottenere l'istanza CI per usare un helper all'interno di un modello: $ ci = get_instance (); $ CI-> load-> helper ( 'name_helper');
Evernoob,

3
Solo una nota, l'helper non deve essere una funzione. Può anche essere una classe. Ad esempio, controlla la strategia per creare "Widget" nel forum di EllisLab . Quindi puoi usare quella classe ovunque ... anche Techincally, potresti caricare il tuo helper nell'istanza CI se lo desideri ottenendo l'istanza e impostandola $thiscome proprietà di essa ... Tutto se vuoi, ovviamente.
Generale Redneck,

2
A che serve il controllo if function_exists? È un accenditore di codice, è una cosa generale di buone pratiche php? Perché ne avresti bisogno?
skrln,

2
@skrln c'è la possibilità che tu abbia un helper caricato automaticamente (chiamiamolo cool_helper) e, se lo dimentichi e chiami manualmente $this->load->helper('cool_helper')dopo che è stato caricato automaticamente, otterrai un errore PHP "già definito" o qualcosa del genere. Questo impedisce di caricare lo stesso codice due volte (è qualcosa come la include_once()funzione PHP ma per gli helper CodeIgniter, per evitare problemi). Fondamentalmente, traducendo un po ': se la funzione non esiste, significa che l'helper non è stato caricato prima. Definiamolo.
Alejandro Iván,

79

Alcuni codici che ti consentono di usare l'istanza CI all'interno dell'helper:

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

    $sql = "select * from table"; 
    $query = $ci->db->query($sql);
    $row = $query->result();
}

1
@ r4ccoon, così giusto. Non mi ci sono voluti nemmeno 5 minuti per tornare alle definizioni dell'istanza. :)
user1048839

@ r4ccoon, e questo è un suggerimento fantastico
Arun

17

Bene per me funziona solo aggiungendo il testo "_helper"dopo nel file php come:

Codeiginiter Helpers

E per caricare automaticamente l'helper nella cartella aplication -> file autoload.php aggiungi nell'array helper il nome senza "_helper" come:

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

E con ciò posso usare tutte le funzioni dell'aiutante


1
Ho appena scoperto che, come hai detto, CodeIgniter richiederà _helperalla fine del nome del file.
Jared Eitnier,

@Jared, sì, è stato anche il caso per me, richiede il _helper alla fine del nome del file!
pollux1er,

11

Per creare un nuovo helper puoi seguire le istruzioni di The Pixel Developer , ma il mio consiglio è di non creare un helper solo per la logica richiesta da una particolare parte di una particolare applicazione. Utilizzare invece quella logica nel controller per impostare gli array sui valori finali previsti. Una volta ottenuto ciò, li passi alla vista usando la Classe parser template e (si spera) puoi mantenere la vista pulita da qualsiasi cosa che assomigli a PHP usando variabili semplici o coppie di tag variabili invece di echos e foreachs. vale a dire:

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

invece di

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

Un altro vantaggio di questo approccio è che non devi preoccuparti di aggiungere l'istanza CI come faresti se usi helper personalizzati per fare tutto il lavoro.


3

Crea un file con il nome del tuo helper in / application / helpers e aggiungilo al file di configurazione del caricamento automatico / caricalo manualmente.

Ad esempio, inserisci un file chiamato user_helper.php in / application / helpers con questo contenuto:

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

Ora puoi caricare l'helper tramite $this->load->helper(‘user’);o aggiungerlo a application / config / autoload.php config.


3

Basta definire un helper nella directory helper dell'applicazione, quindi chiamare dal controller solo il nome della funzione come

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

nel controller caricare l'helper

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

l'uscita sarà

Hello World!

3

Per recuperare un elemento dal tuo file di configurazione, usa la seguente funzione:

$this->config->item('item name'); Dove nome oggetto è l'indice di array $ config che si desidera recuperare. Ad esempio, per recuperare la tua scelta della lingua, dovrai farlo:

$lang = $this->config->item('language'); La funzione restituisce FALSE (booleano) se l'elemento che si sta tentando di recuperare non esiste.

Se si utilizza il secondo parametro della funzione $ this-> config-> load per assegnare gli elementi di configurazione a un indice specifico, è possibile recuperarlo specificando il nome dell'indice nel secondo parametro di $ this-> config- > funzione item (). Esempio:

// Carica un file di configurazione chiamato blog_settings.php e lo assegna a un indice chiamato "blog_settings"

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

// Recupera un elemento di configurazione denominato site_name contenuto nell'array blog_settings

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

// Un modo alternativo per specificare lo stesso oggetto:

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

$ site_name = $ blog_config ['site_name'];

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.