CodeIgniter: नया सहायक बनाएँ?


178

मुझे विभिन्न तरीकों से बहुत सारे सरणियों को लूप करना होगा और इसे एक पृष्ठ में प्रदर्शित करना होगा। सरणियों को एक मॉड्यूल वर्ग द्वारा उत्पन्न किया जाता है। मुझे पता है कि इसके 'विचार' पर फ़ंक्शन शामिल नहीं करना बेहतर है और मैं जानना चाहता हूं कि फ़ंक्शंस फ़ाइल कहाँ डालें।

मुझे पता है कि मैं सहायकों का 'विस्तार' कर सकता हूं, लेकिन मैं एक सहायक का विस्तार नहीं करना चाहता। मैं अपने पाश कार्यों के साथ एक सहायक बनाना चाहता हूँ .. चलो इसे loops_helper.php कहते हैं


आप केवल उन सरणियों को दृश्य में पास क्यों नहीं कर सकते?
माइक होर्डेकी

मैं कर सकता हूँ, लेकिन यह कि कार्यों से दृश्य अलग करने की बात याद आती है ..
जोनाथन

जवाबों:


378

एक CodeIgniter सहायक कई कार्यों के साथ एक PHP फ़ाइल है। यह कोई वर्ग नहीं है

एक फाइल बनाएं और उसमें निम्न कोड डालें।

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

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

आवेदन / सहायकों / के लिए इसे सहेजें । हम इसे "new_helper.php" कहेंगे

पहली पंक्ति यह सुनिश्चित करने के लिए मौजूद है कि फ़ाइल को शामिल नहीं किया जा सकता है और कोडआईग्निटर दायरे के बाहर से चलाया गया है। इसके बाद सब कुछ आत्म व्याख्यात्मक है।

हेल्पर का उपयोग करना


यह आपके नियंत्रक , मॉडल या दृश्य में हो सकता है (बेहतर नहीं)

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

echo test_method('Hello World');

यदि आप बहुत सारे स्थानों पर इस सहायक का उपयोग करते हैं, तो आप इसे स्वतः लोड कॉन्फ़िगरेशन फ़ाइल में जोड़कर स्वचालित रूप से लोड कर सकते हैं <your-web-app>\application\config\autoload.php

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

-Mathew


33
हमेशा उपयोग करें कि सहायक फ़ाइल नाम "_helper" के साथ जोड़ा गया है अन्यथा आपको एक त्रुटि मिलेगी। तो "सहायक_नाम" काम नहीं करेगा लेकिन अपनी फ़ाइल का नाम "name_helper" रखें।
भूमि सिंहल

3
CI2 के रूप में, आपको एक मॉडल के भीतर सहायक का उपयोग करने के लिए CI उदाहरण प्राप्त करने की आवश्यकता होगी: $ ci = get_instance (); $ ci-> load-> सहायक ( 'name_helper');
एवरनोब

3
बस एक ध्यान दें, सहायक नहीं है है एक समारोह किया जाना है। यह एक वर्ग भी हो सकता है। उदाहरण के लिए, एलिसलैब के फोरम में "विजेट" बनाने की रणनीति देखें । तो आप उस वर्ग का उपयोग कहीं भी कर सकते हैं ... Techincally, आप अपने सहायक को CI उदाहरण में लोड कर सकते हैं यदि आप उदाहरण प्राप्त करके और फिर $thisइसे संपत्ति के रूप में सेट करना चाहते हैं ... सभी यदि आप निश्चित रूप से करना चाहते हैं।
जनरल रेडनेक

2
यदि function_exists जाँच करता है तो क्या उपयोग होता है? क्या यह एक कोड इग्निटर चीज है, क्या यह सामान्य php अच्छा अभ्यास है? आपको इसकी आवश्यकता क्यों होगी?
skrln

2
@skrln एक मौका है कि आपके पास एक सहायक ऑटो-लोड है (चलो इसे कॉल करें cool_helper) और, यदि आप इसे भूल जाते हैं और मैन्युअल रूप से कॉल करने के $this->load->helper('cool_helper')बाद इसे ऑटो-लोड किया गया था, तो आपको "पहले से परिभाषित" PHP त्रुटि या कुछ और मिलेगा। यह एक ही कोड को दो बार लोड करने से रोकता है (यह कुछ 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

@ r4ccoon, और यह एक शानदार टिप है
अरुण

17

वैसे मेरे लिए केवल "_helper"php फ़ाइल के बाद पाठ जोड़ने का काम करता है जैसे:

कोडिग्रीन हेल्पर्स

और फ़ोल्डर में सहायक को स्वचालित रूप से लोड करने के लिए आवेदन -> फ़ाइल autoload.php सरणी हेल्पर के नाम में "_helper" जैसे नाम जोड़ें:

$ ऑटोलैड ['हेल्पर'] = सरणी ('कॉम्यून्स');

और इसके साथ ही मैं सहायक के सभी कार्यों का उपयोग कर सकता हूं


1
मुझे अभी पता चला है कि जैसा आपने कहा, _helperफ़ाइल नाम के अंत में CodeIgniter की आवश्यकता होगी ।
जेरेड एटनियर

@Jared, हाँ, यह मेरे लिए भी मामला था, इसे फ़ाइल नाम के अंत में _helper की आवश्यकता है!
प्रदूषक

11

एक नया सहायक बनाने के लिए आप द पिक्सेल डेवलपर के निर्देशों का पालन कर सकते हैं , लेकिन मेरी सलाह सिर्फ एक विशेष एप्लिकेशन के किसी विशेष भाग के लिए आवश्यक तर्क के लिए एक सहायक बनाने की नहीं है। इसके बजाय, उस तर्क का उपयोग नियंत्रक को उनके अंतिम इच्छित मानों में सेट करने के लिए करें। एक बार जब आप ऐसा कर लेते हैं, तो आप उन्हें टेम्पलेट पार्सर क्लास का उपयोग करते हुए देखने के लिए पास कर देते हैं और (उम्मीद है) आप किसी भी चीज़ से दृश्य को साफ रख सकते हैं जो कि इको और फॉर्च्यूस के बजाय साधारण चर या चर टैग जोड़े का उपयोग करते हुए 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; ?>

इस दृष्टिकोण से एक और लाभ यह है कि आपको सीआई उदाहरण को जोड़ने के बारे में चिंता करने की ज़रूरत नहीं है क्योंकि यदि आप सभी काम करने के लिए कस्टम हेल्पर्स का उपयोग करते हैं।


3

अपने हेल्पर / एप्लीकेशन / हेल्पर्स के नाम से एक फाइल बनाएं और इसे ऑटोलैड कॉन्फिगर फाइल में जोड़ें / मैन्युअल रूप से लोड करें।

उदाहरण के लिए, इस सामग्री के साथ user_helper.php / in / 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’);इसे एप्लिकेशन / 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'); जहां आइटम का नाम $ config सरणी सूचकांक है जिसे आप पुनर्प्राप्त करना चाहते हैं। उदाहरण के लिए, अपनी भाषा की पसंद लाने के लिए आप यह करेंगे:

$lang = $this->config->item('language'); फ़ंक्शन FALSE (बूलियन) लौटाता है यदि आप जिस आइटम को लाने का प्रयास कर रहे हैं वह मौजूद नहीं है।

यदि आप $ के दूसरे पैरामीटर का उपयोग कर रहे हैं-> config-> लोड फ़ंक्शन को एक विशिष्ट इंडेक्स पर अपने कॉन्फिग आइटम को असाइन करने के लिए आप इसे $ के दूसरे पैरामीटर में इंडेक्स नाम निर्दिष्ट करके इसे पुनः प्राप्त कर सकते हैं-> config- > आइटम () फ़ंक्शन। उदाहरण:

// ब्लॉग_settings.php नाम की एक कॉन्फ़िग फ़ाइल लोड करता है और इसे "blog_settings" नाम के एक इंडेक्स पर असाइन करता है

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

// blog_settings एरे के भीतर साइट_नाम नामक एक कॉन्फिग आइटम को पुनः प्राप्त करें

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

// एक ही आइटम को निर्दिष्ट करने का एक वैकल्पिक तरीका:

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

$ site_name = $ blog_config ['site_name'];

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.