wake-up-neo.com

So rufen Sie die Codeigniter-Controller-Funktion aus der Sicht auf

Wie kann ich die Codeigniter-Controller-Funktion aus der Sicht aufrufen? Wenn ich die Funktion in einem Controller anrufe, bekomme ich eine 404-Seite.

30
keerthi

Codeigniter ist ein MVC-Framework (Model-View-Controller). Es ist wirklich keine gute Idee, eine Funktion aus der Sicht aufzurufen. Die Ansicht sollte nur für die Präsentation verwendet werden, und Ihre gesamte Logik sollte erfolgen, bevor Sie zur Ansicht in den Controllern und Modellen gelangen.

Ein guter Anfang, um die besten Praktiken zu klären, ist das folgende Tutorial: 

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

Es ist einfach, aber es ist wirklich eine ausgezeichnete Vorgehensweise.

Ich hoffe das hilft!

15
envysea

Sie können die Controller-Funktion auf folgende Weise aus der Ansicht aufrufen:

Regler:

public function read()
{

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

Aussicht:

//to call controller function from view do

$controller->myOtherFunct();
34
saad

Sie können eine Controller-Funktion mit AJAX in Ihrer Ansicht aufrufen. __ In diesem Fall verwende ich die jQuery-Bibliothek, um den Aufruf zu tätigen.

<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>

Auf diese Weise können Sie Codeabschnitte (Module) erstellen und die Methode AJAX in einen HTML-Container erneut laden.

7
Logus

Ich möchte diese Frage beantworten, da dies bei Suchvorgängen immer wieder auftritt -

Sie können eine Controller-Methode in der Ansicht aufrufen, beachten Sie jedoch, dass dies in keinem MVC einschließlich Codeigniter empfohlen wird.

Ihr Controller kann wie unter der Klasse sein -

<?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) ;

?>
4
Abhishek
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();
3
MrĐàm Tn

ansichten können keine Controller-Funktionen aufrufen.

2
rechie

Eine Idee, die ich geben kann, ist

Rufen Sie diese Funktion im Controller selbst auf und geben Sie den Wert zurück, um die Datei anzuzeigen. Mögen,

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;
     }

}

in der Ansicht (home_view.php) verwenden Sie diese Variable. Mögen,

echo $cur_url;
2
ShivarajRH

Wir können die Controller-Funktion auch als Variable auf der Ansichtsseite übergeben.

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);
}
}

In der Ansichtsseite

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

Die Ausgabe ist 9

1
Shailesh Singh

Probier diese.

Fügen Sie diesen Code in Ihre View-Datei ein 

$CI     = & get_instance();
$result = $CI->FindFurnishName($pera);

Fügen Sie Code in Ihre Controller-Datei ein

public function FindFurnishName($furnish_filter)

{

$FindFurnishName        = $this->index_modal->FindFurnishName($furnish_filter);  
$FindFurnishName_val    = '';
foreach($FindFurnishName as $AllRea)
{
    $FindFurnishName_val  .= ",".$AllRea->name;
}
return ltrim($FindFurnishName_val,',');

woher

  1. FindFurnishName ist der Name der Funktion, die in Ihrem Controller definiert ist.
  2. $ pera ist eine Option (je nach Bedarf).

es ist ziemlich einfach, die Funktion korrekt in die Controller-Klasse zu schreiben und mit einem Tag die Controller-Klasse und den Methodennamen oder einen anderen erforderlichen Parameter anzugeben.

<?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();
    }
}
?>

Dies ist die Controller-Klasse Iris.php Und die Modellklasse mit der Funktion, auf die von der Controller-Klasse verwiesen wird.

<?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);
    } 
}
?>

Verwenden Sie in der Ansicht statt einer Schaltfläche einfach den Anker-Link mit dem Controller-Namen und dem Methodennamen.

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

Ich weiß, dass das schlecht ist ... Aber ich befand mich in einer schwierigen Situation, in der es unmöglich ist, dies auf den Controller oder das Modell zurückzusetzen.

Meine Lösung ist, eine Funktion für das Modell ..__ aufzurufen. Sie kann innerhalb einer Ansicht ausgeführt werden .____ Sie müssen jedoch sicherstellen, dass das Modell zuerst in Ihren Controller geladen wurde.

Sagen Sie Ihr Modell main_model, Sie können die Funktion für das Modell wie folgt in Ihrer Ansicht aufrufen: $ This-> main_model-> your_function ();

Ich hoffe das hilft. :) 

1
Ahmad

wenn Sie einen Controller aus einer Sicht aufrufen müssen,...., um möglicherweise eine Teilansicht zu laden, Sie denken als modulare Programmierung.... und Sie sollten die HMVC-Struktur anstelle der Ebene MVC . CodeIgniter nicht implementieren Implementieren Sie HMVC nativ, Sie können jedoch diese nützliche Bibliothek verwenden, um HMVC . https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc zu implementieren.

nach dem Setup Denken Sie daran: Alle Controller sollten sich von MX_Controller erstrecken, um diese Funktion verwenden zu können.

0
abilogos

Gehen Sie zum Anfang Ihres View-Codes und machen Sie es so: 

  <?php
     $this->load->model('MyModelName');
     $MyFunctionReturnValue = $this->MyModelName->MyFunctionName($param));
?>

<div class="row">
    Your HTML CODE
</div>
0
user11084999