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


147

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

Tôi biết tôi có thể 'mở rộng' người trợ giúp, nhưng tôi không muốn mở rộng người trợ giúp. Tôi muốn tạo ra một helper với các chức năng vòng lặp của tôi .. Cho phép gọi nó là loops_helper.php

  0

Tại sao bạn không thể chuyển các mảng đó sang chế độ xem? 29 apr. 092009-04-29 22:07:44

  0

Tôi có thể, nhưng điều đó bỏ lỡ các điểm sepparating xem từ các chức năng .. 29 apr. 092009-04-29 22:37:32

322

Trình trợ giúp CodeIgniter là một tệp PHP có nhiều hàm. Đây không phải là một lớp học

Tạo tệp và đặt mã sau vào đó.

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

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

Lưu số này vào application/helpers/. Chúng tôi sẽ gọi nó là "new_helper.php"

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

Sử dụng Helper


Đây có thể là trong khiển của bạn, mô hình hoặc xem (không thích)

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

echo test_method('Hello World'); 

Nếu bạn sử dụng helper này trong rất 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

+21

Luôn luôn sử dụng rằng tên tập tin trợ giúp được nối với "_helper" nếu không bạn sẽ nhận được một lỗi. Vì vậy, "helper_name" sẽ không hoạt động nhưng đặt tên tệp của bạn là "name_helper". 11 dec. 122012-12-11 10:06:46

+3

Kể từ CI2, bạn cũng sẽ cần phải có được cá thể CI để sử dụng một trình trợ giúp trong một mô hình: $ ci = get_instance(); $ ci-> load-> helper ('name_helper'); 24 apr. 132013-04-24 09:36:42

+3

Chỉ cần lưu ý, Trình trợ giúp không * có * làm chức năng. Nó cũng có thể là một lớp học. Ví dụ: hãy xem chiến lược tạo "Tiện ích con" tại [Diễn đàn của EllisLab] (http://ellislab.com/forums/viewthread/109584/P70). Sau đó, bạn có thể sử dụng lớp đó ở bất cứ nơi nào ... cũng Techincally, bạn có thể tải helper của bạn vào thể hiện CI nếu bạn muốn bằng cách làm ví dụ và sau đó thiết lập '$ this' làm tài sản của nó ... Tất cả nếu bạn muốn tất nhiên. 26 apr. 132013-04-26 15:24:34

+2

Việc sử dụng hàm if_exists là gì? Nó có phải là một điều bắt cháy mã, nó là một điều thực hành tốt php chung? Tại sao bạn cần nó? 14 apr. 142014-04-14 09:33:42

+1

@skrln có khả năng bạn có một trình trợ giúp tự động tải (hãy gọi nó là "cool_helper') và nếu bạn quên và gọi thủ công' $ this-> load-> helper ('cool_helper') 'sau khi nó được tự động tải, bạn sẽ nhận được một 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ư hàm PHP 'include_once()' nhưng đối với người trợ giúp CodeIgniter, để tránh các vấn đề). Về cơ bản, dịch một chút: ** nếu chức năng không tồn tại, nó có nghĩa là người trợ giúp đã không được tải trước đó. Hãy xác định nó. ** 15 may. 142014-05-15 16:03:12


8

Để tạo một helper mới, bạn có thể làm theo các instructions from The Pixel Developer, nhưng lời khuyên của tôi không phải là để tạo ra một helper chỉ cho logic theo yêu cầu của một bộ phận đặc biệt 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 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 sang chế độ xem bằng cách sử dụng Template Parser Class và (hy vọng), bạn có thể giữ chế độ xem sạch 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ác cặp thẻ biến thay vì echos và foreachs. ví dụ:

{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 từ phương pháp này là bạn không phải lo lắng về việc thêm trường hợp CI như bạn nếu bạn sử dụng những người giúp đỡ tùy chỉnh để làm tất cả công việc .


69

Quay lại đây sau một thời gian?

Tôi chỉ muốn viết một số mã cho phép sử dụng Ví dụ CI bên trong helper

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

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

cảm ơn bạn đã cho biết cách sử dụng cá thể CI. 28 jan. 102010-01-28 03:10:50

  0

không phải lo lắng mate 30 jan. 102010-01-30 05:59:13

  0

WOW đó là hữu ích thanksss :) 12 mar. 112011-03-12 10:13:57

  0

@ r4ccoon, vì vậy phải. Thậm chí không đưa tôi 5 phút để quay trở lại với các định nghĩa cá thể. :) 31 dec. 142014-12-31 14:01:08

  0

@ r4ccoon, và đó là một mẹo tuyệt vời 04 mar. 162016-03-04 11:44:37


2

Tạo một file với tên của helper của bạn trong /application/người giúp đỡ và thêm nó vào tập tin cấu hình tự động load/tải nó bằng tay.

Ví dụ:đặt một tập tin gọi là user_helper.php trong /application/người giúp đỡ 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 các helper qua $this->load->helper(‘user’); hoặc thêm nó vào application/config/autoload.php cấu hình .


13

Vâng đối với tôi chỉ hoạt động thêm các văn bản "_helper" sau trong file php như:

Codeiginiter Helpers

Và để tải tự động các helper trong thư mục aplication -> tập tin autoload.php thêm trong tên của người trợ giúp mảng không có "_helper" như:

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

Và với điều đó tôi có thể sử dụng tất cả chức năng của helper

+1

Tôi vừa 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. 30 may. 132013-05-30 20:48:52

+4

+1 để sử dụng NetBeans :) 08 nov. 132013-11-08 12:21:43

  0

@ Jared, vâng, đó cũng là trường hợp của tôi, nó yêu cầu _helper ở cuối tên tệp! 19 sep. 142014-09-19 09:52:30


1

Chỉ cần xác định một helper trong ứng dụng thư mục helper sau đó gọi từ điều khiển của bạn chỉ hoạt động tên như

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

trong điều khiển tải các helper

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

đầu ra sẽ là

Hello World! 

1

Để lấy một mục từ tập tin cấu hình của bạn, sử dụng hàm sau:

$this->config->item('item name'); đâu tên mục là $ mảng cấu hình chỉ số bạn muốn lấy. Ví dụ: để tìm nạp lựa chọn ngôn ngữ của bạn, bạn sẽ thực hiện đ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 cho một chỉ mục cụ thể, bạn có thể lấy nó bằng cách chỉ định tên chỉ mục trong tham số thứ hai của $ this -> config-> item() chức năng. Ví dụ:

// Nạp một tập tin cấu hình có tên blog_settings.php và gán nó vào một chỉ số có tên là "blog_settings"

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

// Lấy một mục cấu hình tên SITE_NAME chứa trong mảng blog_settings

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

// Một cách thay thế để xác định các mục tương tự:

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

$ site_name = $ blog_config ['site_name'];