問題/簡要介紹笨 - 控制器加載不同的意見(URL /路由?)
我最近開始使用笨,我也很新,整個MVC架構,所以我我會請你在這裏陪我。
我目前正在製作的過程是一個簡單的註冊/登錄系統(這將顯然擴展到更晚的時間)。我有一個名爲Users
的控制器,主要有兩個功能。一個是show_register()
,另一個是send_register()
。這與User_Model
,一個所謂的工廠UserFactory
和目前(主要用於測試,這些將在稍後將被組合)三個視圖register_success
,register_fail
和show_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");
}
}
}
?>
這絕對是一種方式來做到這一點!然而,我有點好奇如何去做。我想避免在視圖中儘可能多的邏輯,並且我有一種感覺,隨着我的發展,將會出現更高級的場景,它不會像成功/錯誤消息那樣簡單。不過謝謝,我肯定會考慮這一點! – CmdrSharp
好吧,另一種方法是使用'redirect()'方法。你可以在你的控制器中爲'register_success()'和'register_fail()'做一個單獨的函數,做一個'redirect(Users/register_success)',然後把這兩個函數加入到你之前解釋過的路線中 – acupajoe
謝謝!我不知道爲什麼我沒有想到這一點。我決定不使用重定向,而是簡單地讓該類的註冊函數處理多個場景。感謝您讓我回到正軌! – CmdrSharp