Codeigniter 和 HMVC - 回调不起作用
Codeigniter & HMVC - Callback not working
我几乎经历了很多 link 以及此处和其他位置提供的解决方案,但我无法解决我面临的回调问题。我将 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);
}
如果有人能指出正确的方向来解决问题,那将是一个很大的帮助。提前致谢
纳文
规则中缺少你们中的第一个
$rules['email'] = 'required|callback__uniqueemail';
回调函数也不应该像这样callback__unique_email
出于某种原因我发现 codeigniter 回调不像额外的间隙这样更好callback__uniqueemail
如果 private 不起作用使 public 函数删除下划线
public function uniqueemail() // no need $str
当 make public 时,不要从此处删除多余的下划线 callback_uniqueemail
另一件事 echo Modules run
最好只从视图中加载。
在你的控制器中用 $this->load->view();
替换 echo Modules 运行
您需要添加 $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
在 MX 中使用表单验证时,您需要扩展 CI_Form_validation class,如下所示,
/** 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 相关的回调问题,而无需对您的代码进行任何更改。
我几乎经历了很多 link 以及此处和其他位置提供的解决方案,但我无法解决我面临的回调问题。我将 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);
}
如果有人能指出正确的方向来解决问题,那将是一个很大的帮助。提前致谢
纳文
规则中缺少你们中的第一个
$rules['email'] = 'required|callback__uniqueemail';
回调函数也不应该像这样callback__unique_email
出于某种原因我发现 codeigniter 回调不像额外的间隙这样更好callback__uniqueemail
如果 private 不起作用使 public 函数删除下划线
public function uniqueemail() // no need $str
当 make public 时,不要从此处删除多余的下划线 callback_uniqueemail
另一件事 echo Modules run
最好只从视图中加载。
在你的控制器中用 $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
在 MX 中使用表单验证时,您需要扩展 CI_Form_validation class,如下所示,
/** 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 相关的回调问题,而无需对您的代码进行任何更改。