CodeIgniter: Neuen Helfer erstellen?

178

Ich muss viele Arrays auf unterschiedliche Weise schleifen und auf einer Seite anzeigen. Die Arrays werden von einer Modulklasse generiert. Ich weiß, dass es besser ist, Funktionen nicht in 'Ansichten' aufzunehmen, und ich möchte wissen, wo die Funktionsdatei eingefügt werden soll.

Ich weiß, dass ich die Helfer "erweitern" kann, aber ich möchte keinen Helfer erweitern. Ich möchte mit meinen Schleifenfunktionen eine Art Helfer erstellen. Nennen wir es loops_helper.php

Jonathan
quelle
Warum können Sie diese Arrays nicht einfach an die Ansicht übergeben?
Mike Hordecki
Ich kann, aber das verfehlt den Punkt, die Ansicht von den Funktionen zu trennen.
Jonathan

Antworten:

378

Ein CodeIgniter-Helfer ist eine PHP-Datei mit mehreren Funktionen. Es ist keine Klasse

Erstellen Sie eine Datei und fügen Sie den folgenden Code ein.

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

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

Speichern Sie dies in Anwendung / Helfer / . Wir werden es "new_helper.php" nennen.

Die erste Zeile stellt sicher, dass die Datei nicht eingeschlossen und von außerhalb des CodeIgniter-Bereichs ausgeführt werden kann. Alles danach ist selbsterklärend.

Den Helfer benutzen


Dies kann in Ihrem Controller , Modell oder Ihrer Ansicht sein (nicht vorzuziehen).

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

echo test_method('Hello World');

Wenn Sie diesen Helper an vielen Orten verwenden, können Sie ihn automatisch laden lassen, indem Sie ihn zur Autoload-Konfigurationsdatei hinzufügen, d <your-web-app>\application\config\autoload.php. H.

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

-Mathew

Der Pixel-Entwickler
quelle
33
Verwenden Sie immer den Namen der Hilfsdatei, an den "_helper" angehängt wird, da sonst eine Fehlermeldung angezeigt wird. "Helper_name" funktioniert also nicht, sondern benennt Ihre Datei "name_helper".
Bhumi Singhal
3
Ab CI2 müssen Sie auch die CI-Instanz abrufen, um einen Helfer innerhalb eines Modells verwenden zu können: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob
3
Nur eine Notiz, wird der Helfer nicht hat , um eine Funktion zu sein. Es kann auch eine Klasse sein. Schauen Sie sich beispielsweise die Strategie zum Erstellen von "Widgets" im EllisLab-Forum an . Dann können Sie diese Klasse überall verwenden ... auch technisch gesehen können Sie Ihren Helfer in die CI-Instanz laden, wenn Sie dies möchten, indem Sie die Instanz abrufen und dann $thisals Eigenschaft festlegen ... Alles, wenn Sie möchten.
General Redneck
2
Was nützt die Prüfung if function_exists? Ist es eine Code-Igniter-Sache, ist es eine allgemeine PHP-Good-Practice-Sache? Warum brauchst du es?
skrln
2
@skrln Es besteht die Möglichkeit, dass ein Helfer automatisch geladen wird (nennen wir es cool_helper). Wenn Sie dies vergessen und manuell aufrufen, $this->load->helper('cool_helper')nachdem er automatisch geladen wurde, erhalten Sie einen "bereits definierten" PHP-Fehler oder etwas anderes. Dies verhindert, dass derselbe Code zweimal include_once()geladen wird (es ist so etwas wie die PHP-Funktion, aber für CodeIgniter-Helfer, um Probleme zu vermeiden). Grundsätzlich ein wenig übersetzen: Wenn keine Funktion vorhanden ist, bedeutet dies, dass der Helfer zuvor nicht geladen wurde. Definieren wir es.
Alejandro Iván
79

Code, mit dem Sie die CI-Instanz im Helfer verwenden können:

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

    $sql = "select * from table"; 
    $query = $ci->db->query($sql);
    $row = $query->result();
}
r4ccoon
quelle
1
@ r4ccoon, also richtig. Ich habe nicht einmal 5 Minuten gebraucht, um zu den Instanzdefinitionen zurückzukehren. :)
user1048839
@ r4ccoon, und das ist ein fantastischer Tipp
Arun
17

Gut für mich funktioniert nur das Hinzufügen des Textes "_helper"nach in der PHP-Datei wie:

Codeiginiter-Helfer

Und um den Helfer automatisch in den Ordner aplication -> file autoload.php zu laden, fügen Sie dem Array-Helfer den Namen ohne "_helper" hinzu, wie:

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

Und damit kann ich alle Funktionen des Helfers nutzen

Eduardo Chavira
quelle
1
Ich habe gerade festgestellt, dass CodeIgniter, wie Sie sagten, _helperam Ende des Dateinamens benötigt wird.
Jared Eitnier
@ Jared, ja, das war auch bei mir der Fall, es erfordert den _helper am Ende des Dateinamens!
Pollux1er
11

Um einen neuen Helfer zu erstellen, können Sie den Anweisungen von The Pixel Developer folgen. Mein Rat ist jedoch, keinen Helfer nur für die Logik zu erstellen, die für einen bestimmten Teil einer bestimmten Anwendung erforderlich ist. Verwenden Sie stattdessen diese Logik in der Steuerung, um die Arrays auf ihre endgültigen beabsichtigten Werte zu setzen. Sobald Sie das erhalten haben, übergeben Sie sie mit der Template Parser-Klasse an die Ansicht und (hoffentlich) können Sie die Ansicht mit einfachen Variablen oder Variablen-Tag-Paaren anstelle von Echos und Foreachs von allem, was wie PHP aussieht, sauber halten. dh:

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

anstatt

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

Ein weiterer Vorteil dieses Ansatzes besteht darin, dass Sie sich nicht um das Hinzufügen der CI-Instanz kümmern müssen, wie Sie es tun würden, wenn Sie benutzerdefinierte Helfer verwenden, um die gesamte Arbeit zu erledigen.

Lima
quelle
3

Erstellen Sie eine Datei mit dem Namen Ihres Helfers in / application / helpers und fügen Sie sie der Autoload-Konfigurationsdatei hinzu / laden Sie sie manuell.

Platzieren Sie beispielsweise eine Datei mit dem Namen user_helper.php in / application / helpers mit folgendem Inhalt:

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

Jetzt können Sie den Helper entweder über laden $this->load->helper(‘user’);oder zur Anwendung / config / autoload.php config hinzufügen .

Sumit
quelle
3

Definieren Sie einfach einen Helfer im Application Helper-Verzeichnis und rufen Sie dann von Ihrem Controller aus einfach den Funktionsnamen wie auf

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

im Controller laden Sie den Helfer

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

Ausgabe wird sein

Hello World!
Khurshid Alam Jony
quelle
3

Verwenden Sie die folgende Funktion, um ein Element aus Ihrer Konfigurationsdatei abzurufen:

$this->config->item('item name'); Dabei ist der Elementname der Array-Index $ config, den Sie abrufen möchten. Um beispielsweise Ihre Sprachauswahl abzurufen, gehen Sie wie folgt vor:

$lang = $this->config->item('language'); Die Funktion gibt FALSE (boolean) zurück, wenn das Element, das Sie abrufen möchten, nicht vorhanden ist.

Wenn Sie den zweiten Parameter der Funktion $ this-> config-> load verwenden, um Ihre Konfigurationselemente einem bestimmten Index zuzuweisen, können Sie ihn abrufen, indem Sie den Indexnamen im zweiten Parameter von $ this-> config- angeben. > Funktion item (). Beispiel:

// Lädt eine Konfigurationsdatei mit dem Namen blog_settings.php und weist sie einem Index mit dem Namen "blog_settings" zu.

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

// Ein Konfigurationselement mit dem Namen site_name abrufen, das im Array blog_settings enthalten ist

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

// Eine alternative Möglichkeit, dasselbe Element anzugeben:

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

$ site_name = $ blog_config ['site_name'];

user6280268
quelle