Laravel如何创建区域

时间:2020-09-04 00:17:51

标签: laravel

我之所以提及这些领域,是因为我以前使用过ASP .NET Core,并且可以按某些功能或部门来分隔我的应用程序结构。每个人都可以拥有自己的控制器和布局等。

我正在从事的项目之一,要求我必须复制整个应用程序并仅更改内容。

现在主要布局是这样的

views 
    home
        index
    layouts
        navbar
        footer
        ...
   

1 个答案:

答案 0 :(得分:2)

您只需在Laravel的核心文件夹结构中执行此操作即可。

假设您有两个区域:例如AdminGuest

您可以在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'));
}

最后,分离只是为了您自己的利益,因为最终可以将任何类从任何一个“区域”导入到任何其他区域,并且控制器可以从资源文件夹中的任何“区域”呈现视图。 这只是您要如何组织事物的问题。