通常建置好一個站台都會需要有前台, 後台, 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