在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中没有从视图中调用控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 ajax 调用后加载视图,CodeIgniter

如何从视图中调用 codeigniter 控制器功能

Codeigniter:从视图中调用视图时的变量范围。奇怪的

从 codeigniter 中的视图调用模型是不是不好?

在 codeigniter PATH 中调用控制器模型和视图

Codeigniter 4 如何在视图中调用控制器方法?