在codeigniter中没有从视图中调用控制器
Posted
技术标签:
【中文标题】在codeigniter中没有从视图中调用控制器【英文标题】:Controller not being called from view in codeigniter 【发布时间】:2018-04-11 20:36:55 【问题描述】:我正在尝试使用 codeigniter 创建登录页面。 我有 3 个文件 login_view.php、login.php、login_model.php
login_view.php 是视图文件 login.php 是控制器文件 login_model.php 是模型文件。这是我的看法。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?>
<!DOCTYPE html>
<html>
<body>
<div class="container" style="margin-top:25px">
<div class="row">
<div class="col-md-6 col-sm-8 col-sm-push-2 col-md-push-3 col-xs-10 col-xs-push-1 header">
<img src="<?php echo base_url();?>img/dtulogo.png"/>
</div><!-- /col -->
<h1>University Registration System</h1>
</div><!-- /row -->
</div>
<div class="container">
<div class="row">
<div class="form col-md-6 col-sm-8 col-sm-push-2 col-md-push-3 col-xs-11 ">
<ul class="tab-group">
<li class="tab active"><a href="">Member</a></li>
</ul>
<!-- <div class="tab-content"> -->
<div id="student">
<?php echo validation_errors(); ?>
<form action="<?php echo base_url();?>login/member_login_handle" method="post">
<div class="field-wrap">
<input type="text" placeholder="MEMBER USERNAME" id="member_username" name="member_username" required autocomplete="off"/>
</div>
<div class="field-wrap">
<input type="password" PLACEHOLDER="MEMBER PASSWORD" id="member_password" name="member_password" required autocomplete="off"/>
</div>
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash();?>" />
<button type="submit" class="button button-block"/>Log In</button>
</form>
</body>
</html>
这是控制器文件
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller
public function __construct()
parent::__construct();
$this->load->helper('url');
$this->load->library('form_validation');
$this->load->library(array('session'));
public function member_login_handle()
$this->load->helper('form');
$this->load->library('form_validation');
echo "<script>alert('in the member function');</script>";
$this->form_validation->set_rules('member_username', 'Memeber Username', 'trim|required');
$this->form_validation->set_rules('member_password', 'Password', 'trim|required');
if($this->form_validation->run() == FALSE)
$this->index();
else
$result = _check_database();
echo "<script>alert('$result');</script>";
public function _check_database()
echo "<script>alert('in the database function');</script>";
$member_username = $this->input->post('member_username', TRUE);
$password = $this->input->post('member_password', TRUE);
$this->load->model('login_model');
$result = $this->login_model->validate_member_login($member_username, $password);
if($result)
return true;
else
return false;
public function index()
$this->load->view('login_view');
视图页面没有调用控制器页面。我还在控制器页面中添加了一些调试代码作为警告框。但它没有执行。请查看此代码中的问题。
【问题讨论】:
预期的行为是什么?你是什么意思视图没有调用控制器?不应该反过来吗? @kchason。是的,我只是这个意思。当我单击提交按钮时,xampp 中的输出是“找不到对象”。 您可以在没有表单的情况下访问 /login/member_login_handle 吗?这可能会有所帮助:***.com/questions/19942229/… 是的,我可以访问控制器功能。 还将模型中的$result更改为“return $query->result();”您必须返回结果,以便控制器获取数据 【参考方案1】:对于初学者 - 你的控制器中有这个
$result = _check_database();
因为它是一个类中的方法,你需要用 $this-> 来引用它,就像你在其他地方一样......
所以变成了……
$result = $this->_check_database();
这会让你走得更远。
对于您的调试,您可能需要更改此... (不确定 js 警报是否会显示布尔值...)
else
$result = $this->_check_database();
echo "<script>alert('$result');</script>";
所以要将布尔值转换为单词,请尝试这样的操作...
else
$result = $this->_check_database();
$debug_result = $result ? 'TRUE':'FALSE'; // Translate Boolean to a string
echo "<script>alert('$debug_result');</script>";
【讨论】:
以上是关于在codeigniter中没有从视图中调用控制器的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter:从视图中调用视图时的变量范围。奇怪的