控制器加载不同的视图(URL /路由?)

时间:2014-12-21 22:39:43

标签: php codeigniter codeigniter-2

问题/简介

我目前正在制作的是一个简单的注册/登录系统(后来显然会扩展到更多)。我有一个名为Users的控制器,它主要有两个功能。一个是show_register(),一个是send_register()。这与模型User_Model配对,即所谓的工厂UserFactory,目前(主要用于测试,稍后将合并)三个视图register_successregister_fail和{{ 1}}。他们基本上只是一种说法,嘿,恭喜,你设法注册",一个用于说"哦不,没有注册!"一个用于显示实际登记表。

转到http://url.com/register后,系统会自动显示注册表单(通过show_register路由完成)。

因此,一旦您在$route['register'] = 'users/show_register';中填写表单,表单操作就会导致show_register - 控制器中的send_register函数。检查输入,如果全部有效,则将其发送到Users以进行数据库输入。如果一切顺利,控制器会收到" true"返回结果,并显示相应的视图。 这就是我们的问题所在!

如果我设法注册,我的网址现在是:http://url.com/public/users/send_register。公共文件夹是我保存文件的地方,我已经意识到需要通过htaccess从URL中删除,我将找到关于如何操作的方法。问题是我不希望我的URL由用户控制器和send_register功能组成。我希望它保持为http://url.com/register/,但显示出不同的观点。

我尝试/研究过的内容

我首先考虑了路由。我意识到(希望我对此非常正确,否则我需要学习如何阅读)它不会为我所描述的问题而努力。主要原因是因为它采用我指定的任何内容并将其发送到特定的类/函数。在这种情况下,我们正在做的事情已经是正确的类/功能,但是"错误的" URL显示给用户。这也很困难,因为我在这个控制器内部有不同的方法,这意味着我无法静态映射所有动作以导致单个功能。

我也看过.htaccess,但我还没有找到真正写它的方法。为了更好的衡量,我会在底部打印我的.htaccess文件,以防它有用。我所做的就是修改,以便从URL中删除index.php文件。

.htaccess文件

UsersFactory

如果您有任何其他文件要我展示,我很乐意这样做。现在,我能想到的只是控制器本身。

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

1 个答案:

答案 0 :(得分: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的优点是用户会留在页面上,你会隐藏你的网址。

希望有所帮助!