2011-01-06 138 views
0

好的,我承認。我是CI新手。我正在做一些非常基本的錯誤,我已經在這裏工作了幾個小時,並且找不到我的錯誤。找到CodeIgniter控制器,但找不到

我有一個名爲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'); ?> 
+0

首先,加載主視圖時刪除'.php'。另外你在主視圖中做什麼?似乎你正在發送登錄表單視圖的「路徑」!您的控制器文件夾內的文件夾結構是什麼?你也不是驗證用戶輸入?!或者你在模型中? – ifaour 2011-01-06 20:10:15

+0

我將刪除.php。我發佈了上面的主視圖。這是一種模板化的方法,它告訴模板將登錄表單加載到模板中。文件夾結構:控制器/資源。其他類似的路徑工作正常。也許是表單路徑的問題。 – sehummel 2011-01-06 20:15:44

回答

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'); 
+0

這就是我需要的。謝謝,索普! – sehummel 2011-01-06 20:21:35

+0

上面的路線中的(\ S *)是什麼?$ 1是做什麼的? – sehummel 2011-01-06 20:22:37

+2

'\ s *'是在/ login後匹配任何字符串的正則表達式。 '$ 1'告訴路由將字符串追加到URL中。 – 2011-01-06 20:30:02