【问题标题】:CodeIgniter best method?CodeIgniter 最好的方法?
【发布时间】:2010-11-17 04:18:48
【问题描述】:

我是 Code Igniter 的新手。

我希望重写我们当前的系统以使用代码点火器。

我现在的问题是。

我正在传输登录表单。 目前我们有一个页面接收ajax请求并验证数据并在提交表单时返回状态。

我应该如何在 Code Igniter 中解决这个问题? 我的想法是创建一个接收请求的控制器。

但是,

控制器不应发出任何响应。

那么这是否意味着我应该创建一个视图只是为了吐出几行 json?

【问题讨论】:

  • 我已经完成了这件事,并且通过执行您的原始建议来解决问题。我创建了一个受控的,它在模型中调用一个方法,然后返回结果。它工作正常。我不知道控制器不应该返回值。

标签: php ajax codeigniter controller


【解决方案1】:

当然。你甚至可以让它成为一个通用视图,可以吐出你想要的任何 JSON,然后将对象作为 json_encoded 传递给视图。这样一来,您就可以为处理 AJAX 请求的其他控制器重用相同的视图。

【讨论】:

  • 谢谢,这是个好主意。对此进行扩展,我是否应该创建一个通用的 ajax 模型来处理所有 ajax 请求,例如 example.com/ajax/loginexample.com/ajax/contacts/edit/123 唯一的问题是我可以看到它变得相当大。
  • 我建议不要。控制器的想法是将您网站的不同部分分开 - AJAX 不是“您网站的一部分”,它是您的网站使用的一种技术。
【解决方案2】:

Code Igniter 有一个输入类和一个表单验证类。它们都有有助于处理表单输入的方法:

我会创建一个带有登录方法的帐户控制器。 login 方法将使用前面提到的类进行表单处理,然后调用您的模型来执行 DB 查询。

我认为拥有一个 ajax 控制器对您来说没有多大价值。您可能最终会在所有控制器中使用 ajax。如果您想考虑为 ajax 优化控制器,我会将所有“移动部分”分解为松散耦合的小任务。由于 ajax 请求不会重新加载整个页面,因此可以更轻松地只运行所需的逻辑。

在前端,使用基于模板的布局很有帮助。这样,您发送到输出的唯一内容就是正在更新的部分。 Code Igniter 解析器类也有助于模板化。

【讨论】:

    【解决方案3】:

    下面是一个如何登录的示例。这是来自我自己的网站之一。如果您看到我遗漏的最佳做法,也希望得到其他人的反馈

    查看

    if (isset($message)) {echo $message;} //error message
    
    echo form_open('login/validate_credentials', 'class="form-container"');
    echo form_input('username', 'Username',  'class="form-field"');
    echo form_password('password', 'Password',  'class="form-field"');
    echo form_submit('submit', 'Login');
    echo anchor('login/signup', 'Need an account? Enroll now!');
    echo form_close();
    

    控制器

    function validate_credentials()
        {       
        $this->load->model('usermodel');
        $query = $this->usermodel->validateUser();
    
        if($query) // if the user's credentials validated...
        {
            $data = array(
                'username' => $this->input->post('username'),
                'is_logged_in' => true,
                'bt_link' => $this->usermodel->getBTlink($this->input->post('username')), 
            );
    
            $this->session->set_userdata($data); //store in session
    
            $this->load->view('membership'); //logged in
        }
        else // incorrect username or password
        {
            $data['message'] = "Invalid credentials";
            $data['header_type'] = 'header';
            $data['main_content'] = 'login_form';
            $this->load->view('template', $data);
        }
    }   
    

    这是一个很棒的 CI 教程

    http://net.tutsplus.com/sessions/codeigniter-from-scratch

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2011-07-22
      • 2011-08-03
      • 1970-01-01
      相关资源
      最近更新 更多