CodeIgniter: Buat pembantu baru?


178

Saya perlu mengulang banyak array dengan berbagai cara dan menampilkannya dalam sebuah halaman. Array dihasilkan oleh kelas modul. Saya tahu bahwa lebih baik tidak menyertakan fungsi pada 'tampilan' dan saya ingin tahu di mana memasukkan file fungsi.

Saya tahu saya bisa 'memperpanjang' para pembantu, tetapi saya tidak ingin memperpanjang seorang pembantu. Saya ingin membuat semacam helper dengan fungsi loop saya .. Mari kita sebut itu loops_helper.php


Mengapa Anda tidak bisa meneruskan array itu ke tampilan?
Mike Hordecki

Aku bisa, tapi itu meleset titik sepparating pemandangan dari fungsi ..
Jonathan

Jawaban:


378

Pembantu CodeIgniter adalah file PHP dengan banyak fungsi. Ini bukan kelas

Buat file dan masukkan kode berikut ke dalamnya.

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

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

Simpan ini ke aplikasi / pembantu / . Kami akan menyebutnya "new_helper.php"

Baris pertama ada untuk memastikan file tidak dapat dimasukkan dan dijalankan dari luar lingkup CodeIgniter. Semuanya setelah ini jelas.

Menggunakan Helper


Ini bisa di controller , model atau tampilan Anda (tidak disukai)

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

echo test_method('Hello World');

Jika Anda menggunakan bantuan ini di banyak lokasi, Anda dapat memuatnya secara otomatis dengan menambahkannya ke file konfigurasi pengisian otomatis yaitu <your-web-app>\application\config\autoload.php.

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

-Sayang


33
Selalu gunakan bahwa nama file pembantu ditambahkan dengan "_helper" jika tidak, Anda akan mendapatkan kesalahan. Jadi "helper_name" tidak akan berfungsi tetapi beri nama file Anda "name_helper".
Bhumi Singhal

3
Pada CI2, Anda juga perlu mendapatkan instance CI untuk menggunakan helper dalam model: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob

3
Hanya sebuah catatan, Pembantu tidak harus berfungsi. Itu bisa menjadi kelas juga. Misalnya, lihat strategi untuk membuat "Widget" di Forum EllisLab . Maka Anda dapat menggunakan kelas itu di mana saja ... juga Secara teknis, Anda dapat memuat pembantu Anda ke dalam instance CI jika Anda ingin dengan mendapatkan instance dan kemudian menyetelnya $thissebagai properti ... Semua jika Anda ingin tentu saja.
Jenderal Redneck

2
Apa gunanya check if function_exists? Apakah ini penyala kode, apakah ini merupakan praktik umum php yang baik? Mengapa Anda membutuhkannya?
skrln

2
@ skrln ada kemungkinan Anda memiliki pembantu yang dimuat secara otomatis (sebut saja cool_helper) dan, jika Anda lupa itu dan memanggilnya secara manual $this->load->helper('cool_helper')setelah dimuat secara otomatis, Anda akan mendapatkan kesalahan PHP atau yang sudah didefinisikan sebelumnya. Ini mencegah dari memuat kode yang sama dua kali (itu seperti include_once()fungsi PHP tetapi untuk pembantu CodeIgniter, untuk menghindari masalah). Pada dasarnya, menerjemahkan sedikit: jika fungsi tidak ada, itu berarti helper tidak dimuat sebelumnya. Mari kita definisikan.
Alejandro Iván

79

Beberapa kode yang memungkinkan Anda untuk menggunakan instance CI di dalam helper:

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

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

1
@ r4ccoon, benar sekali. Bahkan tidak butuh saya 5 menit untuk kembali untuk definisi contoh. :)
user1048839

@ r4ccoon, dan itu tip yang fantastis
Arun

17

Yah bagi saya hanya berfungsi menambahkan teks "_helper"setelah di file php seperti:

Pembantu Codeiginiter

Dan untuk memuat secara otomatis helper dalam aplikasi folder -> file autoload.php tambahkan dalam array helper dengan nama tanpa "_helper" seperti:

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

Dan dengan itu saya bisa menggunakan semua fungsi helper


1
Saya baru saja menemukan bahwa seperti yang Anda katakan, CodeIgniter akan meminta _helperdi akhir nama file.
Jared Eitnier

@ Jared, ya, itu juga terjadi pada saya, itu membutuhkan _helper di akhir nama file!
pollux1er

11

Untuk membuat helper baru Anda dapat mengikuti instruksi dari The Pixel Developer , tetapi saran saya adalah jangan membuat helper hanya untuk logika yang diperlukan oleh bagian tertentu dari aplikasi tertentu. Sebagai gantinya, gunakan logika itu di controller untuk mengatur array ke nilai akhir yang diinginkan. Setelah Anda mendapatkannya, Anda meneruskannya ke tampilan menggunakan Kelas Parser Templat dan (mudah-mudahan) Anda dapat menjaga tampilan tetap bersih dari apa pun yang tampak seperti PHP menggunakan variabel sederhana atau pasangan tag variabel, bukan gema dan foreachs. yaitu:

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

dari pada

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

Manfaat lain dari pendekatan ini adalah Anda tidak perlu khawatir tentang menambahkan instance CI seperti yang Anda lakukan jika Anda menggunakan pembantu khusus untuk melakukan semua pekerjaan.


3

Buat file dengan nama helper Anda di / application / helpers dan tambahkan ke file konfigurasi autoload / muat secara manual.

Misalnya, letakkan file bernama user_helper.php di / application / helpers dengan konten ini:

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

Sekarang Anda dapat memuat helper melalui $this->load->helper(‘user’);atau menambahkannya ke application / config / autoload.php config.


3

Cukup tentukan helper di direktori helper aplikasi lalu panggil dari pengontrol Anda, cukup gunakan nama fungsinya

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

di controller memuat helper

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

output akan menjadi

Hello World!

3

Untuk mengambil item dari file konfigurasi Anda, gunakan fungsi berikut:

$this->config->item('item name'); Di mana nama item adalah indeks array $ config yang ingin Anda ambil. Misalnya, untuk mengambil pilihan bahasa Anda, Anda akan melakukan ini:

$lang = $this->config->item('language'); Fungsi mengembalikan FALSE (boolean) jika item yang Anda coba ambil tidak ada.

Jika Anda menggunakan parameter kedua dari fungsi $ this-> config-> untuk menetapkan item konfigurasi Anda ke indeks tertentu, Anda dapat mengambilnya dengan menentukan nama indeks dalam parameter kedua dari $ this-> config- > fungsi item (). Contoh:

// Memuat file config bernama blog_settings.php dan menugaskannya ke indeks bernama "blog_settings"

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

// Ambil item konfigurasi bernama site_name yang terkandung dalam array blog_settings

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

// Cara alternatif untuk menentukan item yang sama:

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

$ site_name = $ blog_config ['site_name'];

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.