【问题标题】:Codeigniter & HMVC - Callback not workingCodeigniter & HMVC - 回调不起作用
【发布时间】:2015-01-13 13:57:47
【问题描述】:

我几乎浏览了此处和其他位置提供的大量链接和解决方案,但我无法解决我面临的回调问题。我将 Codeigniter 与 HMVC 一起使用,代码如下。

以下代码来自My_Form_validation.php

class MY_Form_validation extends CI_Form_validation {

    function run($module = '', $group = ''){
        (is_object($module)) AND $this->CI = &$module;
            return parent::run($group);
    }
}

如果回调函数如下:

public function _unique_email($str) {

    // Check if user already exists
    // Process only for current user
    $id = $this->uri->segment(4);
    $this->db->where('email', $this->input->post('email'));
    !$id || $this->db->where('id !=', $id);
    $user = $this->mdl_admin_users->get();

    if (count($user)) {
        $this->form_validation->set_message('_unique_email', 'User already exists. Please check %s.');
        return FALSE;
    }

    return TRUE;
}

和功能:

public function user_edit($id = NULL) {

    // Fetch a user or set a new one
    if ($id) {
        $data['user'] = $this->mdl_admin_users->get($id);
        count($data['user']) || $data['errors'][] = 'User could not be found';
    }
    else {
        $data['user'] = $this->mdl_admin_users->get_new();
    }

    // setup the form
    $rules = $this->mdl_admin_users->rules_admin;
    $id || $rules['password'] = '|required';
    $this->form_validation->set_rules($rules);

    //process the form
    if ($this->form_validation->run($this) == TRUE) {
        $data = $this->mdl_admin_users->array_from_post(array('firstname', 'lastname', 'email', 'password'));
        $data['password'] = $this->mdl_admin_users->hash($data['password']);
        $this->mdl_admin_users->save($data, $id);
        redirect('admin/user');
    }

    // Load the view
    $data['title'] = 'Edit Users';
    $data['module'] = 'admin';
    $data['header_file'] = 'header_admin';
    $data['nav_file'] = 'nav_admin';
    $data['view_file'] = 'edit_users';
    $data['footer_file'] = 'footer_admin';
    echo Modules::run('template/base_template', $data);

}

如果有人能指出我解决问题的正确方向,那将是一个很大的帮助。提前致谢

纳温

【问题讨论】:

    标签: codeigniter callback hmvc


    【解决方案1】:

    根据wiredesignz,

    在 MX 中使用表单验证时,您需要扩展 CI_Form_validation 类,如下所示,

    /** application/libraries/MY_Form_validation **/ 
    class MY_Form_validation extends CI_Form_validation 
    {
        public $CI;
    }
    

    在将当前控制器作为 $CI 变量分配给 form_validation 库之前。这将使您的回调方法正常运行。

    class Xyz extends MX_Controller 
    {
        function __construct()
        {
            parent::__construct();
    
            $this->load->library('form_validation');
            $this->form_validation->CI =& $this;
        }
    }
    

    这将消除与 HMVC 相关的回调问题,而无需对您的代码进行任何更改。

    【讨论】:

      【解决方案2】:

      首先你在规则中缺少

      $rules['email'] = 'required|callback__uniqueemail';

      回调函数也不应该像这样callback__unique_email 出于某种原因我发现codeigniter 回调不像额外的差距这样更好callback__uniqueemail

      如果 private 不起作用,请使用 public 功能删除下划线

      public function uniqueemail() // no need $str
      

      公开时不要从这里删除多余的下划线callback_uniqueemail

      echo Modules run 的另一件事最好仅从视图中加载。

      在您的控制器中,将运行的 echo 模块替换为 $this->load->view();

      下面创建库后需要添加$this->form_validation->run($this)添加$this才能运行。

      并创建一个新库

      <?php
      
      class MY_Form_validation extends CI_Form_validation {
      
          function run($module = '', $group = '') {
              (is_object($module)) AND $this->CI = &$module;
              return parent::run($group);
          }
      
      } 
      

      最佳教程https://www.youtube.com/watch?v=8fy8E_C5_qQ

      【讨论】:

      • 感谢 Mustang83 的建议。我尝试了你让我做的事情,但仍然不行。
      • 我更新了我的回复。您是否还在应用程序中创建了模块文件夹。
      • 谢谢mustang83,我再次按照您的步骤操作,这是我的一个非常愚蠢的错误,重做您为我提供的说明。我感激不尽。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-09
      • 1970-01-01
      相关资源
      最近更新 更多