CodeIgniter: Tạo người trợ giúp mới?


178

Tôi cần lặp nhiều mảng theo nhiều cách khác nhau và hiển thị nó trong một trang. Các mảng được tạo bởi một lớp mô-đun. Tôi biết rằng tốt hơn hết là không bao gồm các chức năng trên 'lượt xem' và tôi muốn biết nơi chèn tệp chức năng.

Tôi biết tôi có thể 'mở rộng' những người trợ giúp, nhưng tôi không muốn mở rộng một người trợ giúp. Tôi muốn tạo một trình trợ giúp với các hàm vòng lặp của mình .. Hãy gọi nó là loops_helper.php


Tại sao bạn không thể vượt qua các mảng đó để xem?
Mike Hordecki

Tôi có thể, nhưng điều đó bỏ lỡ quan điểm tách biệt chế độ xem từ các chức năng ..
Jonathan

Câu trả lời:


378

Trình trợ giúp CodeIgniter là một tệp PHP có nhiều chức năng. Nó không phải là một lớp học

Tạo một tập tin và đặt mã sau đây vào nó.

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

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

Lưu cái này vào ứng dụng / người trợ giúp / . Chúng ta sẽ gọi nó là "new_helper.php"

Dòng đầu tiên tồn tại để đảm bảo tệp không thể được bao gồm và chạy từ bên ngoài phạm vi CodeIgniter. Tất cả mọi thứ sau này là tự giải thích.

Sử dụng người trợ giúp


Điều này có thể trong bộ điều khiển , mô hình hoặc chế độ xem của bạn (không thích hợp hơn)

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

echo test_method('Hello World');

Nếu bạn sử dụng trình trợ giúp này ở nhiều vị trí, bạn có thể tải nó tự động bằng cách thêm nó vào tệp cấu hình tự động tải tức là <your-web-app>\application\config\autoload.php.

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

-Mathew


33
Luôn luôn sử dụng tên tệp của trình trợ giúp được gắn thêm "_rcper" nếu không bạn sẽ gặp lỗi. Vì vậy, "helper_name" sẽ không hoạt động nhưng đặt tên cho tệp của bạn là "name_helper".
Bhumi Singhal

3
Kể từ CI2, bạn cũng sẽ cần lấy phiên bản CI để sử dụng trình trợ giúp trong mô hình: $ ci = get_instance (); $ ci-> load-> helper ('name_helper');
Evernoob

3
Chỉ cần một lưu ý, Các helper không được một hàm. Nó có thể là một lớp học là tốt. Chẳng hạn, hãy xem chiến lược để tạo ra "Widgets" tại Diễn đàn của EllisLab . Sau đó, bạn có thể sử dụng lớp đó ở bất cứ đâu ... cũng như Techincally, bạn có thể tải trình trợ giúp của mình vào thể hiện CI nếu bạn muốn bằng cách lấy cá thể và sau đó đặt $thislàm tài sản của nó ... Tất nhiên nếu bạn muốn.
Tướng Redneck

2
Việc sử dụng kiểm tra if function_exists là gì? Đây có phải là một điều đánh lửa mã, nó là một điều thực hành tốt php chung? Tại sao bạn cần nó?
skrln

2
@skrln có khả năng bạn có một trình trợ giúp tự động được tải (hãy gọi nó cool_helper) và, nếu bạn quên điều đó và gọi thủ công $this->load->helper('cool_helper')sau khi nó được tải tự động, bạn sẽ gặp lỗi PHP "đã được xác định" hoặc một cái gì đó. Điều này ngăn không cho tải cùng một mã hai lần (nó giống như include_once()hàm PHP nhưng đối với người trợ giúp CodeIgniter, để tránh sự cố). Về cơ bản, dịch một chút: nếu chức năng không tồn tại, điều đó có nghĩa là trình trợ giúp không được tải trước đó. Hãy xác định nó.
Alejandro Iván

79

Một số mã cho phép bạn sử dụng thể hiện CI bên trong trình trợ giúp:

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

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

1
@ r4ccoon, đúng vậy. Tôi thậm chí không mất 5 phút để quay lại định nghĩa cá thể. :)
dùng1048839

@ r4ccoon, và đó là một mẹo tuyệt vời
Arun

17

Đối với tôi chỉ hoạt động thêm văn bản "_helper"sau trong tệp php như:

Người trợ giúp Codeiginiter

Và để tự động tải trình trợ giúp trong ứng dụng thư mục -> tệp autoload.php thêm vào tên của trình trợ giúp mảng mà không có "_rcper" như:

$ autoload ['helper'] = mảng ('comunes');

Và với điều đó tôi có thể sử dụng tất cả các chức năng của người trợ giúp


1
Tôi mới phát hiện ra rằng như bạn đã nói, CodeIgniter sẽ yêu cầu _helperở cuối tên tệp.
Jared Eitnier

@Jared, vâng, đó cũng là trường hợp của tôi, nó yêu cầu _rcper ở cuối tên tập tin!
pollux1er

11

Để tạo một trình trợ giúp mới, bạn có thể làm theo hướng dẫn từ The Pixel Developer , nhưng lời khuyên của tôi là không tạo một trình trợ giúp chỉ theo logic được yêu cầu bởi một phần cụ thể của một ứng dụng cụ thể. Thay vào đó, sử dụng logic đó trong bộ điều khiển để đặt các mảng thành các giá trị dự định cuối cùng của chúng. Khi bạn đã nhận được điều đó, bạn chuyển chúng vào chế độ xem bằng Lớp phân tích mẫu và (hy vọng) bạn có thể giữ chế độ xem sạch khỏi mọi thứ trông giống như PHP bằng cách sử dụng các biến đơn giản hoặc cặp thẻ biến thay vì echos và foreachs. I E:

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

thay vì

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

Một lợi ích khác từ cách tiếp cận này là bạn không phải lo lắng về việc thêm phiên bản CI như bạn muốn nếu bạn sử dụng trình trợ giúp tùy chỉnh để thực hiện tất cả công việc.


3

Tạo một tệp có tên của người trợ giúp của bạn trong / application / helpers và thêm nó vào tệp cấu hình tự động tải / tải nó theo cách thủ công.

Ví dụ: đặt một tệp có tên user_helper.php trong / application / helpers với nội dung này:

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

Bây giờ bạn có thể tải trình trợ giúp qua $this->load->helper(‘user’);hoặc thêm nó vào cấu hình application / config / autoload.php .


3

Chỉ cần định nghĩa một trình trợ giúp trong thư mục trình trợ giúp ứng dụng, sau đó gọi từ trình điều khiển của bạn chỉ cần tên hàm như

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

trong bộ điều khiển tải người trợ giúp

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

đầu ra sẽ là

Hello World!

3

Để lấy một mục từ tệp cấu hình của bạn, hãy sử dụng chức năng sau:

$this->config->item('item name'); Trong đó tên mục là chỉ mục mảng $ config bạn muốn truy xuất. Ví dụ: để tìm nạp lựa chọn ngôn ngữ của bạn, bạn sẽ làm điều này:

$lang = $this->config->item('language'); Hàm trả về FALSE (boolean) nếu mục bạn đang tìm nạp không tồn tại.

Nếu bạn đang sử dụng tham số thứ hai của hàm $ this-> config-> load để gán các mục cấu hình của mình cho một chỉ mục cụ thể, bạn có thể truy xuất nó bằng cách chỉ định tên chỉ mục trong tham số thứ hai của $ this-> config- > hàm item (). Thí dụ:

// Tải một tệp cấu hình có tên blog_sinstall.php và gán nó cho một chỉ mục có tên là "blog_sinstall"

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

// Lấy một mục cấu hình có tên site_name có trong mảng blog_sinstall

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

// Một cách khác để chỉ định cùng một mục:

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

$ site_name = $ blog_config ['site_name'];

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.