如何从视图中调用codeigniter控制器功能?当我在控制器中调用该函数时,获得一个404页面。
答案 0 :(得分:35)
您可以通过以下方式从视图中调用控制器功能:
控制器:
public function read()
{
$object['controller']=$this;
$this->load->view('read',$object);
}
查看:
//to call controller function from view do
$controller->myOtherFunct();
答案 1 :(得分:15)
Codeigniter是一个MVC(模型 - 视图 - 控制器)框架。从视图中调用函数真的不是一个好主意。视图应仅用于演示,并且在进入控制器和模型中的视图之前,所有逻辑都应该发生。
澄清最佳做法的一个良好开端是遵循本教程:
https://codeigniter.com/user_guide/tutorial/index.html
这很简单,但它确实提供了一个很好的操作方法。
我希望这有帮助!
答案 2 :(得分:7)
您可以在视图上使用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 :(得分:4)
我想回答这个问题,因为这一切都在搜索中出现 -
您可以在视图中调用控制器方法,但请注意,这在包括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) ;
?>
答案 4 :(得分:3)
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();
答案 5 :(得分:2)
视图无法调用控制器功能。
答案 6 :(得分: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;
答案 7 :(得分:1)
我知道这很糟糕.. 但是我一直处于困难的境地,无法将其反馈给控制器或型号。
我的解决方案是在模型上调用函数。 它可以在视图内部进行。 但您必须首先确保模型已加载到控制器中。
说出你的模型main_model,你可以在你的视图上调用模型上的函数: $这 - &GT; main_model-&GT; your_function();
希望这有帮助。 :)
答案 8 :(得分:1)
我们还可以在视图页面中将控制器功能作为变量传递。
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
答案 9 :(得分: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();
}
}
?>
这是控制器类 Iris.php 以及从控制器类指向的函数的模型类。
<?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>
答案 10 :(得分:1)
尝试这个。
将此代码添加到您的View文件中
$CI = & get_instance();
$result = $CI->FindFurnishName($pera);
在您的控制器文件中添加代码
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,',');
}
其中
答案 11 :(得分:1)
我也遇到过同样的问题,但是经过几次研究后,我发现它很简单,
在您的Codeigniter项目中找到此URL:application / helpers / util_helper.php
在下面的代码中添加
//you can define any kind of function but I have queried database in my case
//check if the function exist
if (!function_exists('yourfunctionname')) {
function yourfunctionname($param (if neccesary)) {
//get the instance
$ci = & get_instance();
// write your query with the instance class
$data = $ci->db->select('*');
$data = $ci->db->from('table');
$data = $ci->db->where('something', 'something');
//you can return anythting
$data = $ci->db->get()->num_rows();
if ($data > 0) {
return $data;
} else {
return 0;
}
}
}
答案 12 :(得分:0)
如果您需要从视图中调用控制器, 也许加载局部视图, 你认为是模块化编程, 你应该实现HMVC结构代替平面MVC。 CodeIgniter本身没有实现HMVC, 但是你可以使用这个有用的库来实现HMVC。 https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc
设置完成后 请记住:所有控制器都应该从MX_Controller扩展,以便使用此功能。
答案 13 :(得分:0)
转到“查看”代码的顶部,然后按以下步骤进行操作:
<?php
$this->load->model('MyModelName');
$MyFunctionReturnValue = $this->MyModelName->MyFunctionName($param));
?>
<div class="row">
Your HTML CODE
</div>
答案 14 :(得分:0)
我知道这个问题很老,但它仍然是一个相关的问题。根据我的经验,有些情况需要从 Codeigniter 4 应用程序的视图中调用函数,我只是建议您保持它的简洁和最小。下面是我从视图中调用控制器函数的方式:
public function index()
{
$data = [];
$model = new UsersModel();
$data['users'] = $model->findAll();
// $this refers to the controller to be called from view
$data['callfromview'] = $this;
return view('users', $data)
}
<?php $something = $callfromview->fetch_data($id);?>
public function fetch_data($id)
{
$image = new ImageModel();
return $image->find($id);
}
结束!