CodeIgniter: Créer un nouvel assistant?


178

J'ai besoin de boucler beaucoup de tableaux de différentes manières et de les afficher dans une page. Les tableaux sont générés par une classe de module. Je sais qu'il vaut mieux ne pas inclure de fonctions sur les «vues» et je veux savoir où insérer le fichier de fonctions.

Je sais que je peux «étendre» les aides, mais je ne veux pas étendre une aide. Je veux en quelque sorte créer un assistant avec mes fonctions de boucle. Appelons-le loops_helper.php


Pourquoi ne pouvez-vous pas simplement passer ces tableaux à la vue?
Mike Hordecki le

Je peux, mais cela manque le point de séparer la vue des fonctions ..
Jonathan

Réponses:


378

Un assistant CodeIgniter est un fichier PHP avec plusieurs fonctions. Ce n'est pas une classe

Créez un fichier et mettez-y le code suivant.

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

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

Enregistrez-le dans application / helpers / . Nous l'appellerons "new_helper.php"

La première ligne existe pour s'assurer que le fichier ne peut pas être inclus et exécuté en dehors de la portée de CodeIgniter. Tout après cela est explicite.

Utilisation de l'assistant


Cela peut être dans votre contrôleur , modèle ou vue (pas préférable)

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

echo test_method('Hello World');

Si vous utilisez cet assistant dans de nombreux endroits, vous pouvez le charger automatiquement en l'ajoutant au fichier de configuration de chargement automatique, c'est-à-dire <your-web-app>\application\config\autoload.php.

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

-Mathew


33
Assurez-vous toujours que le nom du fichier d'aide est ajouté avec "_helper" sinon vous obtiendrez une erreur. Donc "helper_name" ne fonctionnera pas mais nommez votre fichier "name_helper".
Bhumi Singhal

3
À partir de CI2, vous aurez également besoin d'obtenir l'instance CI afin d'utiliser un assistant dans un modèle: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob

3
Juste une note, l'assistant n'a pas besoin d'être une fonction. Cela peut aussi être une classe. Par exemple, consultez la stratégie de création de "Widgets" sur le forum d'EllisLab . Ensuite, vous pouvez utiliser cette classe n'importe où ... également techniquement, vous pouvez charger votre assistant dans l'instance CI si vous le souhaitez en obtenant l'instance, puis en la définissant en $thistant que propriété de celle-ci ... Tout si vous le souhaitez bien sûr.
Général Redneck

2
À quoi sert la vérification if function_exists? Est-ce une chose d'inflammateur de code, est-ce une bonne pratique générale de php? Pourquoi en auriez-vous besoin?
skrln

2
@skrln il y a une chance que vous ayez un assistant chargé automatiquement (appelons-le cool_helper) et, si vous oubliez cela et appelez manuellement $this->load->helper('cool_helper')après qu'il a été chargé automatiquement, vous obtiendrez une erreur PHP "déjà définie" ou quelque chose. Cela évite de charger le même code deux fois (c'est quelque chose comme la include_once()fonction PHP mais pour les helpers CodeIgniter, pour éviter les problèmes). En gros, traduire un peu: si la fonction n'existe pas, cela signifie que l'assistant n'a pas été chargé auparavant. Définissons-le.
Alejandro Iván

79

Un peu de code qui vous permet d'utiliser l'instance CI à l'intérieur de l'assistant:

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

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

1
@ r4ccoon, tout va bien. Cela ne m'a même pas pris 5 minutes pour revenir pour les définitions d'instance. :)
user1048839

@ r4ccoon, et c'est une astuce fantastique
Arun

17

Eh bien, pour moi, cela ne fonctionne qu'en ajoutant le texte "_helper"après dans le fichier php comme:

Aides Codeiginiter

Et pour charger automatiquement l'assistant dans l'application du dossier -> fichier autoload.php ajoutez dans l'assistant tableau le nom sans "_helper" comme:

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

Et avec ça je peux utiliser toutes les fonctions de l'assistant


1
Je viens de découvrir que comme vous l'avez dit, CodeIgniter nécessitera _helperà la fin du nom de fichier.
Jared Eitnier

@Jared, oui, c'était aussi le cas pour moi, il faut le _helper à la fin du nom du fichier!
pollux1er le

11

Pour créer un nouvel assistant, vous pouvez suivre les instructions de The Pixel Developer , mais mon conseil n'est pas de créer un assistant uniquement pour la logique requise par une partie particulière d'une application particulière. À la place, utilisez cette logique dans le contrôleur pour définir les baies sur leurs valeurs finales prévues. Une fois que vous avez cela, vous les transmettez à la vue à l'aide de la classe d'analyseur de modèle et (espérons-le) vous pouvez garder la vue propre de tout ce qui ressemble à PHP en utilisant des variables simples ou des paires de balises variables au lieu d'échos et de foreachs. c'est à dire:

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

au lieu de

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

Un autre avantage de cette approche est que vous n'avez pas à vous soucier de l'ajout de l'instance CI comme vous le feriez si vous utilisiez des helpers personnalisés pour faire tout le travail.


3

Créez un fichier avec le nom de votre assistant dans / application / helpers et ajoutez-le au fichier de configuration de chargement automatique / chargez-le manuellement.

Par exemple, placez un fichier appelé user_helper.php dans / application / helpers avec ce contenu:

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

Vous pouvez maintenant charger l'assistant via $this->load->helper(‘user’);ou l'ajouter à la configuration application / config / autoload.php .


3

Définissez simplement un assistant dans le répertoire de l'aide d'application, puis appelez à partir de votre contrôleur juste le nom de la fonction comme

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

dans le contrôleur, chargez l'assistant

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

la sortie sera

Hello World!

3

Pour récupérer un élément de votre fichier de configuration, utilisez la fonction suivante:

$this->config->item('item name'); Où le nom de l'élément est l'index du tableau $ config que vous souhaitez récupérer. Par exemple, pour récupérer votre choix de langue, procédez comme suit:

$lang = $this->config->item('language'); La fonction renvoie FALSE (booléen) si l'élément que vous essayez d'extraire n'existe pas.

Si vous utilisez le deuxième paramètre de la fonction $ this-> config-> load afin d'assigner vos éléments de configuration à un index spécifique, vous pouvez le récupérer en spécifiant le nom de l'index dans le deuxième paramètre de la $ this-> config- > fonction item (). Exemple:

// Charge un fichier de configuration nommé blog_settings.php et l'assigne à un index nommé "blog_settings"

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

// Récupère un élément de configuration nommé site_name contenu dans le tableau blog_settings

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

// Une autre manière de spécifier le même élément:

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

$ site_name = $ blog_config ['site_name'];

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.