如何在CodeIgnitor3 MVC框架中使用来自单独控制器的功能?

问题描述 投票:-3回答:2

自从我编辑了这个问题以来,没有人投了反对票。如果您投反对票,请告诉我我可以做得更好。我在那里悬赏,试图解决一个老生常谈的问题,并将其纠正为关于我尚未理解的问题的好问题。我已经开发网站很长时间了,但是最近才开始使用MVC框架。现在,我使用CodeIgniter3。

  • 我对Model-View-Controller框架的了解是,该URL用于调用一个称为Contoller的类,如下所示:
http://localhost/MyApp/index.php/Controller
  • 您可以从那里校准功能:
http://localhost/MyApp/index.php/Controller/Controller-Func
  • 最后您可以传递参数。
http://localhost/MyApp/index.php/Controller/Controller-Func/$var
in code igniter it is
http://localhost/MyApp/index.php/Controller/Controller-Func/$var

但是,我无法理解的是如何通过两个控制器?我可以扩展控制器以包括其他控制器吗?当我只能通过URl传递1个控制器时,如何在代码点火器中完全使用同一页上两个不同控制器的功能?

php url-routing
2个回答
1
投票

通过添加,您可以访问两个控制器。$ this-> load-> add_package_path(APPPATH.'controllers / your-controller.php',FALSE);$ this-> load-> view('my_app_index'); //加载$ this-> load-> view('welcome_message'); //将不会加载默认的welcome_messageCI Official Docs上有更多有关此主题的信息。不过,这是正确的方法。


0
投票

为了更好地帮助您,我首先需要详细说明MVC的工作原理。我从未使用CodeIgniter,但是从Laravel和其他MVC框架的经验来看,Model-View-Controller(MVC)设计范例将您的应用程序组织到三个主要域中-model,通常代表数据库实体和其他类型封装逻辑,view生成用户接收的最终输出(通常是HTML),而controller则控制模型和视图之间的交互流(并可能包含一些内容)。本身的逻辑)。

另外,您将拥有一个front controller处理对您的应用程序的所有调用。在这种情况下,这是您的index.php文件。该前端控制器使用routes映射各种端点。这是您的应用程序将URL链接到控制器方法的方式。

现在,对于您的特定问题,这只是一个问题或组织代码,以便可以由多个控制器方法共享常见内容。由于一条路由通常只能调用一个控制器方法,因此,如果要共享功能,或者要在路由/控制器方法之间共享更复杂的逻辑,则可以在控制器类内部具有共享的受保护方法,这两种路由都可以调用。

例如:

public function firstPage()
{
   $foo = $this->getBar();
   // Load first page view
}

public function secondPage()
{
   $foo = $this->getBar();
   // Load second page view
}

protected function getBar()
{
   return 'Bar';
}

在此简单示例中,您可以使用getBar方法加载由两个页面/控制器方法firstPagesecondPage共享的所有数据或perfrom CRUD操作。

请记住,控制器类及其方法应尽可能简单和简短。我建议将更复杂的逻辑发送给服务或其他类。从长远来看,当与UnitTestingé打交道时,它也将为您提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.