我对CodeIgniter的视图组织有问题。
项目:创建一个允许管理库(书柜)的简单Web应用程序。
我创建了3个模型:会员,类别,图书及其各自的控制器。
我用其控制器实现了Member模型。
在member_controller中我们有:
public function login(){
$this->load->helper('form');
$this->load->helper('email');
$this->load->library('form_validation');
$mail = $this->input->post('mail');
$pass = $this->input->post('pass');
$data['mail'] = $mail;
$data['pass'] = $pass;
$this->form_validation->set_rules('mail', 'mail', 'required');
$this->form_validation->set_rules('pass', 'pass', 'required');
if ($this->form_validation->run() === TRUE)
{
$result=$this->membre_model->login($mail,$pass);
if($result==TRUE){
$this->load->view('templates/header.php');
$this->load->view('membre/logged',$data);
$this->load->view('templates/footer.php');
}
用户登录后,我想显示他之前创建的所有现有类别(因此从数据库中获取)。
最后,我没有得到的是不同的控制器如何在它们之间进行通信。
答案 0 :(得分:0)
您可以使用URI从另一个控制器调用一个控制器,例如,您可能在路径文件中有这样的条目:
$route['books/get_books_by_user/(:any)'] = "books/get_books_by_user/$1";
然后你可以从你的登录控制器调用:
redirect('books/get_books_by_user/'.$user_id)
然后,您将在图书控制器中的get_books_by_user方法中处理此问题。例如使用:
$user_id = $this->uri->segment(3);
$collection = $this->books_model->get_books_by_user($user_id);
您遇到的问题是,如果您不希望用户以外的任何人看到自己的图书清单,您必须检查用户是否从您的图书管理员登录。 这就是为什么大多数用户auth脚本呈现为可以从任何控制器访问的库的原因。如果您的身份验证没有像这样布局,您可以将用户详细信息存储为会话数据并从那里检查,这将意味着您不必通过uri传递用户名。有关详细信息,请在此处查看会话文档:http://ellislab.com/codeigniter/user-guide/libraries/sessions.html
答案 1 :(得分:0)
我该怎么做?
在加载每个将根据用户的登录状态重定向用户的页面时,您必须添加例外。换句话说,如果用户已登录,请将他带到应用程序。如果用户不存在,请将其重定向到注册页面。
这可以通过验证用户是否根据存储的会话值登录来完成。如果存储此会话,则可以让用户查看该页面。这是一个很好的教程,解释了Codeigniter的简单登录系统。
http://www.codefactorycr.com/login-with-codeigniter-php.html
在我看来,我通常使用身份验证库来简化我的应用程序的登录系统。我会使用Ion Auth,它有一个很好的文档,解释了你可以使用的所有功能。
我是否必须在成员控制器的登录功能中调用类别控制器的功能?
您可以像平常一样使用类别控制器。您可以根据浏览器中存储的会话信息更改页面信息或将用户重定向。
我是否必须从登录功能加载类别视图?
您将从类别控制器加载类别视图。登录控制器会在执行登录后将用户重定向到类别控制器。
我是否只需要从一个控制器(成员控制器)构建网站?
不,你可以拥有任意数量的控制器。
如何使用不同控制器的不同视图构建webapp?
控制器代表您网站的一部分。该控制器将为不同的事物加载多个视图。这是一个great little tutorial解释MVC worklow。这有助于您了解该过程。