(Laravel)如何在 1 条路线中使用 2 个控制器?
Posted
技术标签:
【中文标题】(Laravel)如何在 1 条路线中使用 2 个控制器?【英文标题】:(Laravel) How to use 2 controllers in 1 route? 【发布时间】:2014-11-23 09:06:38 【问题描述】:如何在 1 个路由中使用 2 个控制器?
这里的目标是创建多个页面,每个页面都有 1 个职业(例如:会计师),然后将它们链接到提供会计课程的学校。
示例页面包括: 1. 会计师职业信息(我在这里使用“职业”控制器) 2. 提供会计课程的学校(我在这里使用单独的“学校”控制器)。
Route::get('/accountants-career', 'CareerController@accountants');
Route::get('/accountants-career', 'SchoolsController@kaplan');
使用上面的代码将覆盖控制器中的 1 个。
有没有办法解决这个问题?
【问题讨论】:
【参考方案1】:你不能这样做,因为这不是一件好事,而且 Laravel 不会让你有相同的路由来执行两个不同的控制器操作,除非你使用不同的 HTTP 方法(POST、GET.. .)。 Controller 是一个 HTTP 请求处理程序,而不是一个服务类,所以你可能需要稍微改变你的设计,这是一种方法:
如果您将在一页中显示所有数据,请创建一个路由器:
Route::get('/career', 'CareerController@index');
创建一个瘦控制器,仅用于获取信息并传递给您的视图:
use View;
class CareerController extends Controller
private $repository;
public function __construct(DataRepository $repository)
$this->repository = $repository;
public function index(DataRepository $repository)
return View::make('career.index')->with('data', $this-repository->getData());
并创建一个DataRepository类,负责知道在需要那种数据的情况下该怎么做:
class DataRepository
public getData()
$data = array();
$data['accountant'] = Accountant::all();
$data['schools'] = School::all();
return $data;
请注意,此存储库会自动注入到您的控制器中,Laravel 会为您完成。
【讨论】:
我见过的最好的依赖注入示例之一。【参考方案2】:是否有特定原因需要使用相同的路由名称? 目前,当 laravel 处理它们时,您无法将路由区分开来。
为什么不这样;
Route::get('/accountants/career', 'CareerController@accountants');
Route::get('/accountants/schools', 'SchoolsController@kaplan');
如果您有多个职业选择相同的控制器和基于其价值的方法,您也可以这样做。 这使您可以单独调用每个已批准的值,而不必为每个值设置单独的路由和控制器方法。
Route::get('/careerName/career', 'CareerController@all');
Route::get('/careerName/schools', 'SchoolsController@kaplan');
【讨论】:
这里的目标是在 1 个页面中使用 2 个控制器。这里的原因是我们希望将 career 和 schools 放在 1 页以下。将它们分成 2 个不同的页面将无法达到目的。以上是关于(Laravel)如何在 1 条路线中使用 2 个控制器?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 4如何检查一条路线是不是仅来自另一条路线/重定向?
未定义路由 [threads.storev]。 Laravel 8 如何制作这条路线?