CodeIgniter : 새로운 도우미를 만드시겠습니까?


178

다른 방법으로 많은 배열을 반복하여 페이지에 표시해야합니다. 배열은 모듈 클래스에 의해 생성됩니다. '보기'에 함수를 포함하지 않는 것이 더 좋으며 함수 파일을 삽입 할 위치를 알고 싶습니다.

도우미를 '확장'할 수는 있지만 도우미를 확장하고 싶지는 않습니다. 루프 함수를 사용하여 도우미를 만들고 싶습니다. loops_helper.php


왜 그 배열을 뷰에 전달할 수 없습니까?
Mike Hordecki

할 수는 있지만, 기능과 관점을 구분하는 요점을 놓치고 있습니다.
Jonathan

답변:


378

CodeIgniter 도우미는 여러 기능을 가진 PHP 파일입니다. 수업이 아닙니다

파일을 만들고 다음 코드를 넣습니다.

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

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

이것을 application / helpers /에 저장하십시오 . 우리는 그것을 "new_helper.php"라고 부를 것입니다

첫 번째 행은 파일을 CodeIgniter 범위 외부에서 포함하고 실행할 수 없도록하기위한 것입니다. 이것 이후의 모든 것은 자명하다.

도우미 사용


이것은 컨트롤러 , 모델 또는 보기에 있을 수 있습니다 (바람직하지 않음)

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

echo test_method('Hello World');

이 헬퍼를 여러 위치에서 사용하는 경우 자동로드 구성 파일에 추가하여 자동으로로드되도록 할 수 있습니다 (예 :) <your-web-app>\application\config\autoload.php.

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

매튜


33
도우미 파일 이름에 "_helper"가 추가되어 있으면 그렇지 않으면 오류가 발생합니다. 따라서 "helper_name"은 작동하지 않지만 파일 이름은 "name_helper"입니다.
Bhumi Singhal

3
CI2부터는 모델 내에서 도우미를 사용하려면 CI 인스턴스를 가져와야합니다. $ ci = get_instance (); $ ci-> load-> helper ( 'name_helper');
Evernoob

3
메모는 도우미가 기능 일 필요 는 없습니다 . 수업도 가능합니다. 예를 들어, EllisLab 's Forum 에서 "위젯"을 작성하기위한 전략을 확인하십시오 . 그런 다음 어디에서나 해당 클래스를 사용할 수 있습니다. 또한 기술적으로 인스턴스를 가져 와서 $this속성으로 설정하여 도우미를 CI 인스턴스에로드 할 수 있습니다.
General Redneck

2
if function_exists 검사의 용도는 무엇입니까? 코드 점화기입니까, 일반적인 PHP 모범 사례입니까? 왜 필요할까요?
skrln

2
@skrln 헬퍼가 자동로드 될 가능성이 있습니다 (호출하자 cool_helper). $this->load->helper('cool_helper')자동로드 후 잊어 버린 경우 수동으로 호출 하면 "이미 정의 된"PHP 오류 또는 다른 오류가 발생합니다. 이렇게하면 같은 코드를 두 번로드 할 수 없습니다 ( include_once()PHP 함수 와 비슷 하지만 CodeIgniter 도우미의 경우 문제를 피할 수 있습니다). 기본적으로 약간 번역 : 함수가 존재하지 않으면 도우미가 이전에로드되지 않았 음을 의미합니다. 그것을 정의합시다.
Alejandro Iván

79

헬퍼 내에서 CI 인스턴스를 사용할 수있는 일부 코드 :

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

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

1
@ r4ccoon, 맞습니다. 인스턴스 정의로 돌아 오는 데 5 분이 걸리지 않았습니다. :)
user1048839

@ r4ccoon, 그리고 그것은 환상적인 팁입니다
Arun

17

나를 위해 "_helper"다음과 같이 PHP 파일에 텍스트를 추가하는 것만 작동 합니다.

Codeiginiter 헬퍼

그리고 폴더 aplication-> 파일 autoload.php 에 도우미를 자동으로로드하려면 다음과 같이 "_helper"없이 배열 도우미의 이름을 추가하십시오.

$ autoload [ 'helper'] = 배열 ​​( 'comunes');

그로 인해 모든 도우미 기능을 사용할 수 있습니다


1
방금 당신이 말했듯이 CodeIgniter는 _helper파일 이름 끝에 필요할 것임을 발견했습니다 .
Jared Eitnier

@Jared, 그렇습니다. 나도 마찬가지였습니다. 파일 이름 끝에 _helper가 필요합니다!
pollux1er

11

새로운 도우미를 만들려면 Pixel Developer지침을 따를 수 있지만 특정 응용 프로그램의 특정 부분에 필요한 논리에 대해서만 도우미를 만드는 것은 아닙니다. 대신 컨트롤러에서 해당 논리를 사용하여 어레이를 최종 의도 한 값으로 설정하십시오. 일단 얻은 후에는 템플릿 파서 클래스를 사용하여 뷰에 전달하면 (반복적으로) 반향이나 foreachs 대신 간단한 변수 또는 변수 태그 쌍을 사용하여 PHP처럼 보이는 항목에서 뷰를 깨끗하게 유지할 수 있습니다. 즉 :

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

대신에

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

이 방법의 또 다른 이점은 사용자 지정 도우미를 사용하여 모든 작업을 수행 할 때처럼 CI 인스턴스 추가에 대해 걱정할 필요가 없다는 것입니다.


3

/ application / helpers 에서 헬퍼 이름으로 파일을 작성 하고 자동로드 구성 파일에 추가하거나 수동으로로드하십시오.

예를 들어 user_helper.php 파일 을 / application / helpers 에 다음 내용으로 저장하십시오.

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

이제 헬퍼를 통해로드 $this->load->helper(‘user’);하거나 application / config / autoload.php 구성에 추가 할 수 있습니다 .


3

응용 프로그램 도우미 디렉토리에 도우미를 정의한 다음 컨트롤러에서 함수 이름과 같이 호출하십시오.

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

컨트롤러에서 도우미로드

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

출력은

Hello World!

3

구성 파일에서 항목을 검색하려면 다음 기능을 사용하십시오.

$this->config->item('item name'); 여기서 item name은 검색하려는 $ config 배열 색인입니다. 예를 들어, 언어 선택을 가져 오려면 다음을 수행하십시오.

$lang = $this->config->item('language'); 가져 오려는 항목이 존재하지 않으면 함수는 FALSE (부울)를 반환합니다.

구성 항목을 특정 색인에 할당하기 위해 $ this-> config-> load 함수의 두 번째 매개 변수를 사용하는 경우 $ this-> config-의 두 번째 매개 변수에 색인 이름을 지정하여 구성 항목을 검색 할 수 있습니다. > item () 함수. 예:

// blog_settings.php라는 구성 파일을로드하고 "blog_settings"라는 인덱스에 할당합니다.

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

// blog_settings 배열에 포함 된 site_name이라는 구성 항목을 검색합니다.

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

// 같은 항목을 지정하는 다른 방법 :

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

$ site_name = $ blog_config [ 'site_name'];

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.