【问题标题】:Stumped by CodeIgniter controllers found but not found被找到但未找到的 CodeIgniter 控制器难住了
【发布时间】:2011-01-07 04:17:52
【问题描述】:

好吧,我承认。我是CI新手。我在做一些非常基本的错误,我已经做了几个小时,但找不到我的错误。

我有一个名为 login 的控制器。它在我的控制器文件夹中的资源文件夹中。它加载一个名为 login_form 的视图。但是对于我的生活,如果我去 domain.com/resources/login 或 domain.com/resources/index,它将不会加载。但我可以通过一条路线到达它:

$route['engineering-resources/login'] = "resources/login";

即使我这样处理,也找不到我的表单操作。这是我的表格:

<?php 
    echo form_open('resources/login/validate_credentials'); //folder/controller/method.  I think this is where my problem is
    echo form_input('username', 'Username');
    echo form_password('password', 'Password');
    echo form_submit('submit', 'Login');
    echo anchor('login/signup', 'Create Account');
    echo form_close();
    ?>

路径是我的控制器文件夹中的资源文件夹,控制器是使用 validate_credentials 方法的登录控制器。这是我的登录控制器的相关部分:

class Login extends Controller {

    function index()
    {
        $data['title'] = 'Engineering Resources | Login';
        $data['main_content'] = 'resources/login_form';
        $this->load->view('templates/main.php', $data);

    }

    function validate_credentials()
    {       
        $this->load->model('login/membership_model');
        $query = $this->membership_model->validate();

        if($query) // if the user's credentials validated...
        {
            $data = array(
                'username' => $this->input->post('username'),
                'is_logged_in' => true
            );
            $this->session->set_userdata($data);
            redirect('resources/members_area');
        }
        else // incorrect username or password
        {
            $this->index();
        }
    }

索引功能在我使用路由时有效,但在我使用上述 domain.com 路径时无效。我认为这就是它找不到 validate_credentials 方法的原因。我做错了什么?

这里是main.php

<?php $this->load->view('includes/header.php'); ?>

<?php $this->load->view('includes/nav.php'); ?>

<?php $this->load->view($main_content); ?>

<?php $this->load->view('includes/footer.php'); ?>

【问题讨论】:

  • 首先,在加载主视图时删除.php。另外,您在主视图中在做什么?看来您正在发送登录表单视图的“路径”!您的控制器文件夹中的文件夹结构是什么?你也不是验证用户输入?!还是你在模特中?
  • 我将删除 .php。我在上面发布了主要视图。这是一种模板化方法,它告诉模板将登录表单加载到模板中。文件夹结构:控制器/资源。其他类似的路径工作正常。可能是表单路径的问题。

标签: codeigniter codeigniter-url


【解决方案1】:
$route['engineering-resources/login'] = "resources/login";

这不会路由到 engineering-resources/login/validate_credentialsresources/login/validate_credentials

你应该有这样的东西:

// not tested
$route['engineering-resources/login/(\S*)'] = "resources/login/$1";

还有一点是,如果你使用路由,你也应该使用视图中的路由..

echo form_open('engineering-resources/login/validate_credentials');

【讨论】:

  • 这就是我所需要的。谢谢,索普!
  • 你上面的路线中的 (\S*) 是什么,$1 有什么作用?
  • \s* 是匹配 /login 之后的任何字符串的正则表达式。 $1 告诉路由将字符串附加到 URL。
  • 另一个问题,如果我想重定向资源文件夹、登录控制器、members_area 方法,我是否要重定向('resources/login/members_area'); ?
  • 你应该重定向到engineering-resources/login/members_area
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2012-04-18
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
相关资源
最近更新 更多