Php 控制器加载不同的视图(URL/路由?)
问题/简介 我目前正在制作的是一个简单的注册/登录系统,它显然将在以后扩展到更多。我有一个名为Users的控制器,它主要有两个功能。一个是显示寄存器,一个是发送寄存器。这与模型用户模型(即所谓的Factory UserFactory)配对,目前主要用于测试,稍后将结合三个视图register\u success、register\u fail和show\u register。他们基本上是一种观点,说嘿,恭喜,你成功注册了,一种观点说哦,不,不注册!还有一个用来显示实际的登记表 进入后,您将自动看到通过$route['register']='users/show_register';路由完成的注册表 因此,一旦您在show_寄存器中填写表单,表单操作将导致用户控制器中的send_register函数。检查输入,如果所有输入都有效,则将其发送到UsersFactory进行数据库输入。如果一切正常,控制器将收到返回的true结果,并显示相应的视图。这就是我们的问题所在 如果我成功注册,我的URL现在是:。公共文件夹是我保存文件的地方,我意识到需要通过htaccess从URL中删除这些文件,我会找到我的方法。问题是我不希望我的URL由用户控制器和该控制器的send_register函数组成。我希望它保持原样,但表现出不同的观点 我尝试/调查的内容 我首先调查了路线。我希望我在这方面是对的,否则我需要学习如何理解它对我描述的问题不起作用。主要原因是它接受我指定的任何内容并将其发送到特定的类/函数。在这种情况下,我们所做的已经转到了正确的类/函数,但是向用户显示了错误的URL。这也很困难,因为我在这个控制器中有不同的方法,这意味着我不能静态地将所有动作映射到单个函数 我也研究了.htaccess,但我还没有找到一种实际编写它的方法。为了更好地衡量,我将在底部打印我的.htaccess文件,以防它有所帮助。我所做的只是修改,以便从URL中删除index.php文件 .htaccess文件 如果有任何其他文件你想让我看,我很乐意这样做。现在,我所能想到的可能是控制器本身Php 控制器加载不同的视图(URL/路由?),php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,问题/简介 我目前正在制作的是一个简单的注册/登录系统,它显然将在以后扩展到更多。我有一个名为Users的控制器,它主要有两个功能。一个是显示寄存器,一个是发送寄存器。这与模型用户模型(即所谓的Factory UserFactory)配对,目前主要用于测试,稍后将结合三个视图register\u success、register\u fail和show\u register。他们基本上是一种观点,说嘿,恭喜,你成功注册了,一种观点说哦,不,不注册!还有一个用来显示实际的登记表 进入后,您将自动看
<?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");
}
}
}
?>
很抱歉,我花了这么长时间才给出答案 为什么不直接调用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的优点是用户可以留在页面上,而您可以隐藏您的url
希望有帮助 那绝对是一种方法!然而,我有点好奇如何做,否则。我希望尽可能避免视图中的逻辑,并且我感觉随着我的前进,会出现更高级的场景,而不会像成功/错误消息那么简单。不过谢谢你,我一定会考虑到这一点的!好的,另一种方法是使用重定向方法。您可以在控制器中为register_success(注册成功)和register_fail(注册失败)设置单独的功能,执行重定向用户/register_success(注册成功),然后将这两个功能添加到路由中,就像您之前解释的那样谢谢!我不知道为什么我没有想到这一点。我决定不使用重定向,而是让该类的register函数处理多个场景。谢谢你让我重回正轨!
<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>