2012-04-03 14 views
29

से कॉल करने के लिए कैसे कोडिग्निटर नियंत्रक फ़ंक्शन को कॉल से कॉल करें? जब मैं एक नियंत्रक में फ़ंक्शन को कॉल करता हूं, तो 404 पेज प्राप्त करें।कोडिनेटर नियंत्रक फ़ंक्शन को

+3

क्या आप समझा सकते हैं कि आपका उद्देश्य इस तरह से क्या कर रहा है? – Jasonw

+0

समस्या ठीक है। कारण कॉन्फ़िगरेशन बेस यूआरएल सेटिंग – keerthi

+1

में है, जबकि मैं नीचे दी गई टिप्पणियों से सहमत हूं कि यह अच्छा एमवीसी अभ्यास नहीं है, यह अभी भी एक अच्छा सवाल है, –

उत्तर

17

कोडिग्निटर एक एमवीसी (मॉडल - व्यू - कंट्रोलर) ढांचा है। दृश्य से एक समारोह को कॉल करना वास्तव में एक अच्छा विचार नहीं है। दृश्य केवल प्रस्तुति के लिए उपयोग किया जाना चाहिए, और नियंत्रक और मॉडल में देखने से पहले आपका सभी तर्क होना चाहिए।

सबसे अच्छा अभ्यास स्पष्ट करने के लिए एक अच्छी शुरुआत इस ट्यूटोरियल का पालन करने के लिए है:

https://codeigniter.com/user_guide/tutorial/index.html

यह आसान है, लेकिन यह वास्तव में एक उत्कृष्ट कैसे बाहर देता है।

मुझे आशा है कि इससे मदद मिलती है!

+0

के लिए हेल्पर्स लिख सकते हैं निश्चित रूप से, मैंने पहले से ही ट्यूटोरियल का पालन नहीं किया है परिणाम इस सवाल के बारे में सब कुछ। – elvenbyte

+0

आपका लिंक आज उपलब्ध नहीं है –

+0

यह स्वीकार्य उत्तर कैसे है? मैं अपने पेज पर खुद जा सकता था। हमें बेहतर करने की ज़रूरत है, दोस्त। –

3

विचार नियंत्रक कार्यों को कॉल नहीं कर सकते हैं।

+3

हम AJAX में नियंत्रक funtion कॉल कर सकते हैं। अब यह ठीक काम करता है – keerthi

+0

@Anupama: हाँ आप अनुरोध से नियंत्रक कर सकते हैं लेकिन विचारों से नहीं। – rechie

+1

वैसे, आप इसे ऐसा कर सकते हैं: 'ControllerName :: methodname();' –

2

एक विचार मैं दे सकते हैं, है

कॉल कि नियंत्रक ही है और वापसी मान में कार्य फ़ाइल को देखने के। पसंद है,

class Business extends CI_Controller { 
    public function index() { 
      $data['css'] = 'profile'; 

      $data['cur_url'] = $this->getCurrURL(); // the function called and store val 
      $this->load->view("home_view",$data); 
    } 
    function getCurrURL() { 
       $currURL='http://'.$_SERVER['HTTP_HOST'].'/'.ltrim($_SERVER['REQUEST_URI'],'/').''; 
      return $currURL; 
    } 

} 

देखें (home_view.php) उस चर का उपयोग करें। की तरह,

echo $cur_url; 
+0

या मॉडल फ़ंक्शन बना सकते हैं, फिर हम सीधे फ़ाइल में उपयोग कर सकते हैं ... $ arr_fran = $ this-> reserv_model-> experience_info ($ च [ 'created_on']); – ShivarajRH

1

मैं जानता हूँ कि यह बुरा है .. लेकिन मैं कठिन स्थिति है जहाँ यह नियंत्रक या मॉडल को यह वापस डाल करने के लिए असंभव है में किया गया है।

मेरा समाधान मॉडल पर एक फ़ंक्शन कॉल करना है। यह एक दृश्य के अंदर किया जा सकता है। लेकिन आपको यह सुनिश्चित करना होगा कि मॉडल को आपके नियंत्रक को पहले लोड किया गया है।

अपने मॉडल main_model कहें, आप इस तरह के मॉडल पर इस तरह के मॉडल पर फ़ंक्शन कॉल कर सकते हैं: $ यह-> main_model-> your_function();

इस सहायता की आशा करें। :)

24

आप दृश्य से नियंत्रक समारोह कॉल कर सकते हैं निम्नलिखित तरीके से:

नियंत्रक:

public function read() 
{ 

      $object['controller']=$this; 
      $this->load->view('read',$object); 
} 

दृश्य:

//to call controller function from view do 

$controller->myOtherFunct(); 
+3

+1 क्योंकि मुझे पता था कि कंट्रोलर को देखने के लिए सबसे अच्छी विधि नहीं है, लेकिन नियमों को तोड़ने के लिए ऐसी चाल जानना कभी-कभी उपयोगी हो सकता है। –

6

आप AJAX के साथ एक नियंत्रक समारोह पर कॉल कर सकते हैं अपने राय। इस मामले में, मैं कॉल करने के लिए jQuery लाइब्रेरी का उपयोग कर रहा हूं।

<script type="text/javascript"> 
    $.ajax({ 
      url: "<?=site_url("controller/function")?>", 
      type: "post", // To protect sensitive data 
      data: { 
       ajax:true, 
       variableX: "string", 
       variableY: 25 
       //and any other variables you want to pass via POST 
        }, 
      success:function(response){ 
      // Handle the response object 
      } 
     }); 
</script> 

इस तरह आप कोड (मॉड्यूल) के भाग बना सकते हैं और उन्हें HTML कंटेनर में AJAX विधि पुनः लोड कर सकते हैं।

3

मैं इस सवाल का जवाब देने के लिए यह सब समय के ऊपर आता है के रूप में खोजों में चाहते हैं -

आप ध्यान में रखते हुए एक नियंत्रक विधि कॉल कर सकते हैं, लेकिन कृपया ध्यान दें कि इस CodeIgniter सहित किसी भी MVC में एक अच्छा अभ्यास नहीं है।

आपका नियंत्रक वर्ग नीचे की तरह हो सकता है -

<?php 
    class VCI_Controller extends CI_Controller { 
    .... 
    .... 
    function abc($id){ 
     return $id ; 
    } 

    } 
?> 

Now You can call this function in view files as below -- 
<?php 
    $CI =& get_instance(); 
    $CI->abc($id) ; 

?> 
0

हम भी दृश्य पेज में चर के रूप में नियंत्रक समारोह पारित कर सकते हैं।

class My_controller extends CI_Controller { 
    public function index() { 
      $data['val']=3; 
      $data['square']=function($val){ 
           return $val*$val; 
            }; 
    $this->load->view('my-view',$data); 
} 
} 

दृश्य पेज

<p>Square of <?=$val?> 
    <?php 
    echo $square($val); 
    ?> 
</p> 

उत्पादन 9

2
class MY_Controller extends CI_Controller { 

    public $CI = NULL; 

    public function __construct() { 
     parent::__construct(); 
     $this->CI = & get_instance(); 
    } 

    public function yourMethod() { 

    } 

} 

// in view just call 
$this->CI->yourMethod(); 
1

यह काफी सरल है, बस फ़ंक्शन ठीक नियंत्रक कक्षा में लिखा गया है और निर्दिष्ट करने के लिए एक टैग का उपयोग किया है नियंत्रक वर्ग और विधि का नाम, या कोई अन्य निरंतर पैरामीटर ..

<?php 
if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Iris extends CI_Controller { 
    function __construct(){ 
     parent::__construct(); 
     $this->load->model('script'); 
     $this->load->model('alert'); 

    }public function pledge_ph(){ 
     $this->script->phpledge(); 
    } 
} 
?> 

यह नियंत्रक वर्ग आईरिस.एफपी और फ़ंक्शन वाला मॉडल क्लास नियंत्रक वर्ग से इंगित करता है।

<?php 
if (! defined('BASEPATH')) exit('No direct script access allowed'); 
class Script extends CI_Model { 
    public function __construct() { 
     parent::__construct(); 
     // Your own constructor code 
    }public function ghpledge(){ 
     $gh_id = uniqid(rand(1,11)); 
     $date=date("y-m-d"); 
     $gh_member = $_SESSION['member_id']; 
     $amount= 10000; 
     $data = array(
      'gh_id'=> $gh_id, 
      'gh_member'=> $gh_member, 
      'amount'=> $amount, 
      'date'=> $date 
     ); 
     $this->db->insert('iris_gh',$data); 
    } 
} 
?> 

बटन के बजाय दृश्य पर केवल नियंत्रक नाम और विधि नाम के साथ एंकर लिंक का उपयोग करें।

<html> 
    <head></head> 
    <body> 
     <a href="<?php echo base_url(); ?>index.php/iris/pledge_ph" class="btn btn-success">PLEDGE PH</a> 
    </body> 
</html> 
+0

कृपया बताएं कि यह आपकी मदद करता है या नहीं –

0

अगर आप किसी दृश्य से कोई नियंत्रक कॉल करने के लिए की जरूरत है, शायद एक आंशिक दृश्य लोड करने के लिए, आप के रूप में मॉड्यूलर प्रोग्रामिंग सोच, और आप हवाई जहाज MVC के एवज में HMVC संरचना को लागू करना चाहिए। कोडइग्निटर ने एचएमवीसी को मूल रूप से लागू नहीं किया, लेकिन आप एचएमवीसी को लागू करने के लिए इस उपयोगी लाइब्रेरी का उपयोग कर सकते हैं। https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc

सेटअप के बाद याद रखें: कि आपके सभी नियंत्रकों चाहिए इस सुविधा का उपयोग करने के क्रम में MX_Controller से फैली हुई है।