【Laravel 5.x】如何在Laravel routing 建立 Backend & Frontend

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

訂閱
通知
guest
0 留言
預約回饋
查看所有留言