我之所以提及这些领域,是因为我以前使用过ASP .NET Core,并且可以按某些功能或部门来分隔我的应用程序结构。每个人都可以拥有自己的控制器和布局等。
我正在从事的项目之一,要求我必须复制整个应用程序并仅更改内容。
现在主要布局是这样的
views
home
index
layouts
navbar
footer
...
答案 0 :(得分:2)
您只需在Laravel的核心文件夹结构中执行此操作即可。
假设您有两个区域:例如Admin
和Guest
。
您可以在app
目录的顶层将两者分开。然后在每个文件夹中复制典型的Laravel文件夹结构。
app
admin
Http
Controllers
Middleware
...
Models
...
guest
Http
Controllers
Middleware
...
Models
...
然后在资源文件夹中可以匹配视图的分隔:
resources
views
admin
layouts
admin.blade.php
index.blade.php
guest
layouts
admin.blade.php
index.blade.php
然后使用点语法从控制器中调用视图。
view('admin.index')
这种方式要注意的一件事是,您可能需要在两个区域之间共享模型,例如User
,因此您也必须管理“全局”“区域”。
只要确保您遵循正确的命名空间和类导入,就可以了。
我个人更喜欢的另一种方法是将现有文件夹结构中的内容分开。例如,您的控制器将位于:
app
Http
Controllers
Admin
DashboardController.php
Guest
WelcomeController.php
同样,您可以用相同的方式分隔视图。
您可以更进一步,通过在RouteServiceProvider
中映射新的路由文件来分离路由文件。
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
$this->mapAdminRoutes();
$this->mapGuestRoutes();
}
/**
* Define the "admin" routes for the application.
*
* @return void
*/
protected function mapAdminRoutes()
{
Route::prefix('admin')
->middleware('admin')
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
}
最后,分离只是为了您自己的利益,因为最终可以将任何类从任何一个“区域”导入到任何其他区域,并且控制器可以从资源文件夹中的任何“区域”呈现视图。 这只是您要如何组织事物的问题。