对于我所有的"公众"面向页面/路由我正在使用我创建的名为Public_controller
的控制器,它扩展了CI_Controller
。目前,Public_controller
是一个只有构造函数的空文件。
在我的路线中,我已将Application_controller
定义为我的默认控制器。它是mysite.com/about-us
之类的路由指向的地方:
PHP
class Application_controller extends Public_Controller {
public function about() {
$data['page_title'] = 'About';
$data['page_description'] = '';
$data['page_keywords'] = '';
$data['main_content'] = 'public/about';
$this->load->view('public/templates/default', $data);
}
}
我在每个面向公众的页面的标题中都有一个登录表单。我熟悉如何处理/处理CI中的表单。我正在努力的是如何全局检查而不是一次性页面。
例如,如果我的表单位于我的页面的<body>
,通常我会这样做:
PHP
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean');
if ($this->form_validation->run() == FALSE) {
$data['main_content'] = 'public/forms/my_form';
} else {
// Handle the form.
}
}
$this->load->view('public/templates/default', $data);
一切都很好。我显然不能在每个控制器方法上都有这种语法。用户可以登录任何页面 - 所以我需要能够在他们登录时收听/处理表单。否则,我需要显示用户请求的页面。
也许我需要另一个扩展Public_controller
的控制器?
感谢您的建议。
答案 0 :(得分:1)
如果我已正确理解您的问题,您希望您的用户能够从您的应用程序的任何页面登录。
有多种方法可以做到这一点,这里有两个:
1 /创建一个负责Ajax调用的控制器并在那里写你的登录功能
<强> Ajax.php 强>
class Ajax extends CI_Controller
{
$email = $this->input->post("mail_login");
$password = $this->input->post("pass_login");
$user = $this->somemodel->get_user_by_mail_and_pass($email, $password);
if($user)
{
//stuff if success
}
else
{
//Stuff if failed
}
}
2 /创建一个将在任何地方加载的js文件。
<强> myjsfile.js 强> (我想你正在使用jQuery)
$("#theform").on("submit", function(event)
{
event.preventDefault();
var post_array =
{
"mail_login" : $("#txt_mail_login").val(),
"pass_login" : $("#txt_pass_login").val()
}
$.ajaxSetup({async:false});
$.post(baseUrl + "/Ajax/ajax_login", post_array,
function(data)
{
//Stuff here (redirect, change form into user info....)
});
)};
瞧!
在标题中,登录表单为
<form method="post" action="<?= site_url("My_controller/my_login_function/" . $_ci_view); ?>">
在这里,我们假设您有一个名为my_login_function的函数负责日志记录。该函数位于控制器中,这里是my_controller(糟糕的名字:))。
$ _ ci_view是一个包含当前视图名称的var。我们将使用它在表单提交之前将用户重定向到他所在的位置。
例如,如果您的用户已加载了视图主页,您将在表单中获得以下内容:
<form method="post" action="http://www.example.com/My_controller/my_login_function/home">
<强> My_controller.php 强>
class My_Controller extends CI_Controller
{
public function user_login($view_name)
{
$this->load->library('form_validation');
$this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean');
if ($this->form_validation->run() == FALSE)
{
//Your stuff here
$this->load->view($view_name);
}
else
{
//Your stuff here
$this->load->view($view_name);
}
$this->load->view('public/templates/default', $data);
}
}
我们可以想象,如果成功,您可以使用用户的数据设置会话。然后,在标题中,构建一个条件,在设置会话时显示或不显示登录表单。