Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用codeIgniter组织web应用程序_Php_Html_Codeigniter_Web Applications_Web - Fatal编程技术网

Php 使用codeIgniter组织web应用程序

Php 使用codeIgniter组织web应用程序,php,html,codeigniter,web-applications,web,Php,Html,Codeigniter,Web Applications,Web,我对CodeIgniter的视图组织有问题 项目:创建一个简单的web应用程序,允许管理图书馆(书架) 我创建了3个模型:成员,类别,书籍及其各自的控制器 我用它的控制器实现了成员模型 在成员控制器中,我们有: public function login(){ $this->load->helper('form'); $this->load->helper('email'); $this->load->library('form_validation');

我对CodeIgniter的视图组织有问题

项目:创建一个简单的web应用程序,允许管理图书馆(书架)

我创建了3个模型:成员类别书籍及其各自的控制器

我用它的控制器实现了成员模型

在成员控制器中,我们有:

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


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

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

最后,我不知道不同的控制器之间如何通信。

您可以使用URI从一个控制器调用另一个控制器,例如,您的路由文件中可能有这样一个条目:

$route['books/get_books_by_user/(:any)'] = "books/get_books_by_user/$1";
然后,您可以从登录控制器调用:

redirect('books/get_books_by_user/'.$user_id)
然后,您将在books控制器中的get_books_by_user方法中处理此问题。例如,使用:

$user_id = $this->uri->segment(3);
$collection = $this->books_model->get_books_by_user($user_id);
你的问题是,如果你不想让用户以外的任何人看到他们自己的图书列表,你必须检查用户是否从你的图书控制器登录。
这就是为什么大多数用户身份验证脚本显示为一个库,可以从任何控制器访问。如果您的身份验证不是这样布置的,您可以将用户详细信息存储为会话数据并从那里进行检查,这意味着您不必通过uri传递用户名。请在此处查看会话文档以了解详细信息:

我如何才能做到这一点?

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

这可以通过基于存储的会话值验证用户是否登录来实现。如果存储了此会话,则可以让用户查看页面。这是一个很好的教程,解释了Codeigniter的简单登录系统

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

我是否必须在成员控制器的登录函数中调用类别控制器的函数?

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

我必须从登录功能加载类别视图吗?

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

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

不,您可以有任意多个控制器

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


控制器将代表站点的一部分。此控制器将为不同的内容加载多个视图。下面是对MVC工作流程的解释。这将有助于您了解流程

根据应用程序需要的安全程度。。。。使用cookies存储登录数据可能是个坏主意,因为用户可以编辑这些数据。Ion auth是一个很好的库,它将使你的应用程序更容易安全。这是真的,但我只是用cookie一词来帮助解释浏览器中存储的数据的概念。谢谢你的回复。事实上,这些答案帮助我澄清了我的想法。正如你所说,一个控制器代表我网站的一个部分,在我的例子中,我有3个部分(成员系统、类别、书籍),所以有3个控制器。这些控制器在处理后将数据传递到不同的视图。现在,我的问题是:如何只有一个控制器可以加载包含所有不同部分(由其他控制器创建)和控制器以前的视图(登录->登录)的完整页面?基本上你不需要,你应该将常用方法放在帮助器或库中,这就是为什么我说用户身份验证通常作为库实现的原因。你想做的就是所谓的分层MVC(HMVC),看看这个。使用它,您甚至可以从一个视图调用控制器(但不要尝试-它会变得混乱),您的控制器可以从多个模型调用信息。您可以有一个模型来检查用户是否存在,另一个模型来处理登录用户的信息。