CodeIgniter:新しいヘルパーを作成しますか?


178

多くの配列をさまざまな方法でループし、ページに表示する必要があります。配列はモジュールクラスによって生成されます。「ビュー」に関数を含めない方がよいことはわかっています。関数ファイルを挿入する場所を知りたいです。

ヘルパーを「拡張」できることはわかっていますが、ヘルパーを拡張したくありません。ループ関数を使ってヘルパーを作成したいのですが、loops_helper.phpという名前にしましょう


これらの配列をビューに渡すことができないのはなぜですか?
マイクHordecki

私がすることができますが、その...機能からのビューをsepparatingのポイントを逃す
ジョナサン・

回答:


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 2013

3
ただのメモ、ヘルパーは関数である必要はありません。クラスでもかまいません。たとえば、EllisLabのフォーラムで「ウィジェット」を作成する戦略を確認してください。次に、そのクラスをどこでも使用できます。また、必要に応じて、インスタンスを取得し$thisてそのプロパティとして設定することで、ヘルパーをCIインスタンスにロードできます。もちろん、必要な場合はすべて。
General Redneck 2013

2
if function_existsチェックの用途は何ですか?それはコードイグナイターのものですか、それは一般的なPHPの良い習慣のものですか?なぜそれが必要なのですか?
skrln

2
@skrlnヘルパーが自動ロードされる(それを呼び出そうcool_helper)可能性があり、それを忘れて$this->load->helper('cool_helper')自動ロードされた後に手動で呼び出すと、「定義済み」のPHPエラーなどが表示されます。これにより、同じコードを2回ロードすることが防止されます(これはinclude_once()PHP関数のようなものですが、CodeIgniterヘルパーが問題を回避するためです)。基本的に、少し翻訳します。関数が存在しない場合は、ヘルパーが以前にロードされていなかったことを意味します。それを定義しましょう。
アレハンドロイヴァン

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 2014

@ r4ccoon、そしてそれは素晴らしいヒントです
Arun

17

まあ私にとって"_helper"は、次のようなphpファイルの後にテキストを追加するだけで機能します:

Codeiginiterヘルパー

そして、ヘルパーをフォルダーaplication->ファイルautoload.phpに自動的にロードするには、配列ヘルパーの名前に「_helper」なしの名前を追加します

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

これで、ヘルパーのすべての機能を使用できます


1
あなたが言ったように、CodeIgniterが_helperファイル名の最後に要求することを発見しました。
Jared Eitnier 2013年

@Jared、はい、それは私にとってもそうでした、ファイル名の最後に_helperが必要です!
pollux1er 2014

11

新しいヘルパーを作成するには、Pixel Developerの指示に従いますが、私のアドバイスは、特定のアプリケーションの特定の部分で必要なロジックのためだけにヘルパーを作成することではありません。代わりに、コントローラーでそのロジックを使用して、配列を最終的な目的の値に設定します。これを取得したら、テンプレートパーサークラスを使用してビューに渡します。(できれば)エコーやforeachの代わりに単純な変数や変数タグのペアを使用して、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; ?>

このアプローチのもう1つの利点は、カスタムヘルパーを使用してすべての作業を行う場合のように、CIインスタンスの追加について心配する必要がないことです。


3

/ application / helpersにヘルパーの名前のファイルを作成し、それをautoload構成ファイルに追加して、手動でロードします。

たとえば、user_helper.phpというファイルを/ application / helpersに次の内容で配置します。

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

これで、ヘルパーを読み込むか、application / config / autoload.php configに$this->load->helper(‘user’);追加できます


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'); ここで、アイテム名は、取得する$ config配列インデックスです。たとえば、選択した言語を取得するには、次のようにします。

$lang = $this->config->item('language'); フェッチしようとしているアイテムが存在しない場合、この関数はFALSE(ブール値)を返します。

$ this-> config-> load関数の2番目のパラメーターを使用して構成アイテムを特定のインデックスに割り当てる場合は、$ this-> config-の2番目のパラメーターでインデックス名を指定することにより、それを取得できます。 > 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.