1

問題/簡要介紹笨 - 控制器加載不同的意見(URL /路由?)

我最近開始使用笨,我也很新,整個MVC架構,所以我我會請你在這裏陪我。

我目前正在製作的過程是一個簡單的註冊/登錄系統(這將顯然擴展到更晚的時間)。我有一個名爲Users的控制器,主要有兩個功能。一個是show_register(),另一個是send_register()。這與User_Model,一個所謂的工廠UserFactory和目前(主要用於測試,這些將在稍後將被組合)三個視圖register_successregister_failshow_register配對。他們基本上是一種說法,「嘿,恭喜你,你設法登記」,一個說「哦,不,沒有登記!」一個用於顯示實際的註冊表格。

進入http://url.com/register後,系統會自動顯示登記表本身(通過與$route['register'] = 'users/show_register';進行路由完成)。

因此,一旦填寫了show_register中的表單,表單動作會導致Users控制器中的send_register函數。輸入被檢查,如果全部有效,則將其發送到UsersFactory用於數據庫輸入。如果一切正常,則控制器接收「真」回來,並顯示相應的視圖。 這就是我們的問題所在!

如果我設法註冊,我的網址現在是:http://url.com/public/users/send_register。公用文件夾是我保存文件的地方,我意識到需要通過htaccess從URL中刪除,我將找到我如何做的方法。問題是我不希望我的URL由用戶控制器和send_register函數組成。我希望它保持爲http://url.com/register/,但表現出不同的看法。

我已經試過/看着

我看着路由首先的。我意識到(希望我對此是正確的,否則我需要學習如何閱讀),它不適用於我描述的問題。主要原因是因爲它採用我指定的任何內容,並將其發送到特定的類/函數。在這種情況下,我們正在做的是去正確的類/功能,但是向用戶顯示「錯誤的」URL。這也是困難的,因爲我在這個控制器裏面有不同的方法,這意味着我不能靜態地映射所有的動作來導致一個單一的功能。

我也研究過.htaccess,但我還沒有找到實際編寫它的方法。爲了好的措施,我會在底部打印我的.htaccess文件以防萬一。我所做的一切都是修改的,以便從URL中刪除index.php文件。

.htaccess文件

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* index.php/$0 [PT,L] 

如果有你想我表現出的任何其他文件,我會很樂意這樣做。目前,我能想到的只有控制器本身。

<?php 
if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Users extends CI_Controller { 

    public function show_register() 
    { 
     $this->load->view("show_register"); 
    } 

    public function send_register() 
    { 
     // Populate the model with the information we got from the form. 
     $data = array(
      'user_name' => $this->input->post('username'), 
      'user_pass' => $this->input->post('password'), 
      'user_email' => $this->input->post('email'), 
      'user_level' => 1 
      ); 

     // Then pass that on to the User Factory, which will insert that into the database. 
     $this->load->library("UserFactory"); 

     if($this->userfactory->registerUser($data)) 
     { 
      $this->load->view("register_success"); 
     } 
     else 
     { 
      $this->load->view("register_fail"); 
     } 
    } 
} 
?> 

回答

0

道歉爲此花了這麼長時間的答案!

爲什麼不只是做一個ajax調用?

在你的圖,其中的形式是:

<div id="message_box" class="hidden"></div> 
<form id="theForm" method="post" action="submitForm()"></form> 

<script> 
function submitForm() { 
    $.post("<?= site_url('Users/send_register');?>", $("#theForm").serialize(), function(data) { 
     success: $("#message_box").html(data).show(); 
     error: $("#message_box").html("<p>There was an error with your request</p>").show(); 
    }); 
} 
</script> 

當然也有一百萬個不同的方式來做到這一點。但我假設這些視圖只是消息視圖,就像簡短的html成功/失敗(如上所述)。 ajax的好處是用戶會留在網頁上,並且你會隱藏你的網址。

希望有幫助!

+0

這絕對是一種方式來做到這一點!然而,我有點好奇如何去做。我想避免在視圖中儘可能多的邏輯,並且我有一種感覺,隨着我的發展,將會出現更高級的場景,它不會像成功/錯誤消息那樣簡單。不過謝謝,我肯定會考慮這一點! – CmdrSharp

+0

好吧,另一種方法是使用'redirect()'方法。你可以在你的控制器中爲'register_success()'和'register_fail()'做一個單獨的函數,做一個'redirect(Users/register_success)',然後把這兩個函數加入到你之前解釋過的路線中 – acupajoe

+1

謝謝!我不知道爲什麼我沒有想到這一點。我決定不使用重定向,而是簡單地讓該類的註冊函數處理多個場景。感謝您讓我回到正軌! – CmdrSharp