2013-01-15 102 views
1

我在CodeIgniter上组织视图时遇到问题。使用codeIgniter组织web应用程序

项目:创建一个简单的Web应用程序,允许管理一个库(书柜)。

我创建了3种型号:会员分类书籍各自的控制器。

我使用控制器实现了成员模型。

在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'); 


} 

一旦用户登录,我想告诉他之前创建的所有现有的类别(所以从数据库中获取它们)。

  • 我该怎么做?
  • 是否需要在成员控制器的登录功能中调用类别控制器的功能?
  • 我是否必须从Login函数加载类别视图?
  • 我是否只需从一个控制器(成员控制器)构建站点?
  • 如何用不同控制器的不同视图构建webapp?

最后,我不明白的是不同的控制器之间如何沟通。

回答

0

我该怎么做?

您将不得不添加一个异常时加载每个页面,将重定向用户根据他们的登录状态。换句话说,如果用户已登录,请将其带到应用程序。如果用户不存在,请将其重定向到注册页面。

这可以通过验证用户是否基于存储的会话值进行登录来完成。如果存储此会话,则可以让用户查看该页面。下面是一个很好的教程,介绍一个简单的Codeigniter登录系统。

http://www.codefactorycr.com/login-with-codeigniter-php.html

在我看来,我通常使用的身份验证库来简化登录系统,我的应用程序。我会使用Ion Auth,它有一个很好的文档解释你可以使用的所有功能。

我是否需要在成员控制器的登录功能中调用类别控制器的功能?

您可以像通常一样简单地使用类别控制器。您可以根据存储在浏览器中的会话信息更改页面信息或重定向用户。

我是否必须从Login函数加载类别视图?

您将从类别控制器中加载类别视图。执行登录后,登录控制器会将用户重定向到类别控制器。

我是否必须从一个控制器(成员控制器)构建站点?

不,您可以拥有尽可能多的控制器。

如何使用不同控件的不同视图构建webapp?

控制器将代表您网站的一部分。这个控制器会为不同的事情加载多个视图。这是一个great little tutorial解释MVC worklow。这将帮助您了解过程。

+0

取决于应用程序需要的安全程度....使用cookie存储登录数据可能是一个坏主意,因为它们可以由用户编辑。 Ion auth是一个出色的图书馆,它将使保护您的应用程序变得更容易。 – WebweaverD

+0

非常真实,但我只是使用术语cookie来帮助解释存储在浏览器中的数据的概念。 – Karl

+0

感谢您的回复。其实这些答案帮助我澄清我的想法。正如你所说,控制器代表我的网站的一部分在我的情况下,我有3个部分(成员系统,类别,书),所以3个控制器。这些控制器在处理后将数据传递给不同的视图。现在,我的问题是:如何只有一个控制器可以加载所有不同部分(由其他控制器制作)和控制器以前的视图(登录 - >记录)的整个页面? – Quentin91360

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