通常建置好一個站台都會需要有前台, 後台, API等等…
Laravel建置好通常不會幫你切好Routing
因此你就必須自行切割Routing
切割的方式基本上會從 RouteServiceProvider > Web Routing > Controller > View > Model
廢話不多說直接看下面的Code
Route Model Binding
app/Provider/RouteServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* 啟動
*
* @return void
*/
public function boot()
{
parent::boot();
}
/**
* 路由分派器
*
* @return void
*/
public function map()
{
// 解析當下網址, 判斷要執行前台or後台
//$currentDomain = $this->app->request->server->get('HTTP_HOST');
//$currentDomain = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : "";
$currentDomain = 'frontend';
switch ( $currentDomain ) {
case 'frontend': // 前台
$this->mapWebFrontendRoutes();
break;
case 'backend': // 後台
$this->mapWebBackendRoutes();
break;
default: // API
$this->mapApiRoutes();
break;
}
}
/**
* 前台
*
* @return void
*/
protected function mapWebFrontendRoutes()
{
Route::middleware( 'web' )
->namespace( 'App\Http\Controllers\Frontend' )
->group(base_path('routes/webRoutesFrontend.php'));
}
/**
* 後台
*
* @return void
*/
protected function mapWebBackendRoutes()
{
Route::middleware( 'web' )
->namespace( 'App\Http\Controllers\Backend' )
->group(base_path('routes/webRoutesBackend.php'));
}
/**
* API
*
* @return void
*/
protected function mapWebAPIRoutes()
{
Route::prefix( 'API' )
->middleware( 'api' )
->namespace( $this->namespace . '\API' )
->group(base_path('routes/webRoutesAPI.php'));
}
}
Route
Routes資料夾中要自己建立前後台的 Rotes 設定檔 (如圖)
以下範例都以前台當範例

routes/webRoutesFrontend.php
<?php Route::get( '/', 'HomeController@index' ); Route::get( 'Home', 'HomeController@index' );
View Layout
View 和 Layout 建置方式也是切 Backend 與 Fronted (如圖)

resources/views/Frontend/Layouts/Master.blade.php
<!doctype html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8">
<title>@yield('title')</title>
</head>
<style>
html, body {
background-color: #fff;
color: #636b6f;
font-family: 'Raleway', sans-serif;
font-weight: 100;
height: 100vh;
margin: 0;
font-size: 55px;
}
</style>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
View
resources/views/Frontend/Login/Login.blade.php
@extends('Frontend.Layouts.Master')
@section('title', 'Frontend')
@section('content')
<p>{{ $data }}</p>
@endsection
Base Controller
Controllers 部分也是切 Backend 與 Frontend
要注意的是 Backend 與 Frontend 必須要有各自的父類別的Controller
這樣也有好處 Backend與 Frontend的父類別的Controller可以設計成符合自己需求的Controller
子類別Controller 建立時候 namespace也要注意不要用錯

app/Http/Controllers/Frontend/Controller.php
<?php
namespace App\Http\Controllers\Frontend;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
Controller
app/Http/Controllers/Frontend/HomeController.php
<?php
namespace App\Http\Controllers\Frontend;
use Illuminate\Http\Request;
use DB;
class HomeController extends Controller
{
public function index()
{
$results = DB::select("select * from user where account = 'user1'");
return View("Frontend.Login.Login", [ 'data' => json_encode($results, true) ]);
}
}
本文的範本能夠用一個 Laravel 專案簡單切割前台與後台
參考: https://blog.csdn.net/wangrui12138/article/details/69526283