Wie kann ich die Codeigniter-Controller-Funktion aus der Sicht aufrufen? Wenn ich die Funktion in einem Controller anrufe, bekomme ich eine 404-Seite.
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!
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();
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.
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) ;
?>
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();
ansichten können keine Controller-Funktionen aufrufen.
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;
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
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
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>
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. :)
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.
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>