###### tags: `Laravel教學已拍` # [Laravel入門]一頁式網站的從零出發實作指南 #by Voyager ![](https://i.imgur.com/rCN0rBx.jpg) ## 課程介紹 你是正在入門的Laravel新手還是還是喜愛VUE開發的前端工程師? 你是否有實作後台功能的問題需要解決呢? 我正準備製作一支影片來解決你們的問題,而且一點都不難! 這影片將教會你 如何將前端套版檔案導入Laravel專案中 如何將資料從後台抓出後送至前台 如何自動生成後台介面 如何動態從後台管理選單 如何動態從後台管理設定 仍在Laravel入門的你,將不需要再為後台開發除錯而充滿挫折 喜歡專注於VUE開發的你,將能夠升級為全棧工程師,自己搞定後台 這支影片花了我大量的時間,從年前就規劃並製作到現在,足以作為付費課程內容,一段時間之後可能就會下架,如果有需要的話,可要趕緊在下架前學起來唷! 我知道你擔心自己跟不上,這支影片是一步步的帶著你作出網頁,再加上觀念說明,所以長度超過60分鐘,就算不熟PHP的你都做得到! 想知道影片何時會上線? 告訴你個好消息,影片已經上架囉 ,趕緊搶個好位置來學習自動生成後台技術吧! https://youtu.be/wXg0ZdH9Kl0 ## 腳本 ### 導言 各位小夥伴大家好 我是哥布林工程師 因為之前都在錄製人工智慧系列的課程 所以有一段時間沒有在錄製Laravel教學 讓大家久等了 真是不好意思 從這個禮拜開始 原則上每週或至少每兩週都會有一個Laravel實戰單元 有不少小夥伴希望能夠有Voyager的實戰教學 那今天就要來直接一步步的示範 如何從一個新專案開始 使用Voyager來快速建構出一個帶後台的一頁式網頁 從這個教學裡頭你將學到Voyager套件的核心架構 以及如何結合Laravel來作網頁極速開發 如果你對於後台自動生成技術感興趣的話 今天這個單元可千萬不要錯過 另外我先前在Laravel社團分享 Voyager 的中文手冊 如果還沒拿到有需要索取的可以在底下留言 如果留言數超過100 我就發布連結到影片資訊欄裡頭 那麼就讓我們開始吧 --- ### 專案準備 首先我們先來準備專案資料夾 課程是假設大家都已經擁有Laravel的開發環境 如果還沒有開發環境的小夥伴也沒關係 你可以參考我放在資訊欄的環境建置筆記 第一步 先建立一個新的專案 開啟Terminal 輸入以下指令 `laravel new webs` webs 就是專案的名稱 > 建立新專案示範 第二步 要為專案建立資料庫 名稱同樣取為 webs 資料庫編碼請選擇utf8mb4 這樣才能支援表情符號 > 建立資料庫示範 第三步 確認專案的設定是否正確 第一個確認 config/app.php 第二個確認 .env 隱私設定檔 > 確認設定檔示範 第四步 下載 Voyager 套件 開啟Terminal 輸入以下指令 `composer require tcg/voyager` > 下載套件示範 第五步 安裝 Voyager 套件 輸入以下指令 `php artisan voyager:install` 這一步其實可以加上--with-dummy選項就能安裝假資料 但我今天的實作不會用到假資料 有需要的小夥伴你可以自己試試看 > 安裝Voyager套件示範 第六步 Voyager安裝完畢 代表後台已經生成了 但是我們還沒有帳號能夠登入 所以這一步 需要生成管理員帳號 輸入以下指令 `php artisan voyager:admin admin@admin.com --create` 這裡加上create選項是表示這個使用者還不存在需要新增 接著Terminal就會以互動的方式要求你輸入使用者相關的欄位資料 > 建立管理員帳號示範 最後完成管理者帳號的建立 第六步 最後我們確認看看後台能否正常登入與使用 開啟瀏覽器輸入專案網址並在後面加上/admin http://webs.test/admin 在登入頁面輸入剛才設定的帳號與密碼 如果一切順利你應該就能看到Voyager的後台 後台的文字也應該都是繁體中文才對 如果你看到的是英文版本 就代表第三步確認設定出了問題 請回去再看一次然後把資料庫清空再做一次 到這裡我們已經完成了專案的前置準備 接下來進入一頁式網頁的實作展示 對了 如果你是第一次來到我們頻道的話 哥布林挨踢頻道是專注於電腦科學相關的課程 每週四下午6點都有新的影片上線 如果聽完今天的單元覺得對你有幫助的話 請幫忙給影片按讚訂閱我們的頻道 也別忘了開啟小鈴鐺唷 --- ### 前台套版導入 回到實作展示 這次實作的前端是使用免費的前端版型Moderna 好方便大家可以拿來練習 它的網址會列在下方資訊欄 實際上你可以替換成任何自己喜歡的版型 作法都一樣也不會有任何問題的 請放心 另外這次的實作展示的所有內容 都會放在筆記本當中 所有的程式碼也都可以到筆記本裡頭去複製 筆記本連結請參考底下資訊欄 這一小節 我們來示範前端套版的導入 > 前台套版導入示範   進到Moderna官網 點Free Download來把版型下載到電腦裡頭 我們選擇 Bootstrap v4的版本 下載並解壓縮後會看到一堆的html範例檔以及assets資料夾 請把assets資料夾放進public資料夾 而index.html就是我們這次要使用的模版 把index.html檔案複製到resources/view資料夾內 更名為 demo.blade.php 新增一個控制器 名為SiteController 開啟Terminal,輸入以下指令 `php artisan make:controller SiteController` 開啟 SiteController.php 我們將要加入一個 renderDemoPage() 用來渲染展示頁 請輸入以下程式碼: ``` //app\Http\Controllers\SiteController.php public function renderDemoPage(){ return view('demo'); } ``` 接著要在路由檔去加入路由來將請求分配給新的控制器方法 開啟 web.php 請輸入以下程式碼: ``` //routes\web.php Route::get('/demo','App\Http\Controllers\SiteController@renderDemoPage'); ``` 完成之後,開啟瀏覽器輸入專案網址以及demo路徑 看看網頁是否正常出現 到這裡我們已經完成前端框架的導入 是否很簡單呢 --- ### 示範 Voyager 的BREAD 這一小節 我們要示範如何導入Voyager來實作CRUD 現在前端的資料都來自於Blade檔 還沒有與資料庫連結 所以接下來我將要示範如何改由Voyager來管理資料庫的資料 以及將資料從後端拋到前台畫面上 > Voyager的BREAD示範 #### 示範腳本 拜現在網頁都要支持RWD所賜 現在的網頁看起來都很像是積木一樣 也就是說一頁式網頁就是由多的網頁元素拼圖組合而成 就像是畫面現在所劃的樣子 這就是多個網頁元素 每個網頁元素包含title標題 subtitle次標題 image 圖片 以及 content 內容等欄位 取名為Element,而對應的表格就是elements 為了簡化示範,我已經把Migration檔案內容準備好了 就像是這個樣子 大家可以直接到筆記本去複製下來改用 ``` <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; class CreateElements extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('elements', function (Blueprint $table) { $table->id(); $table->string('page', 20); //頁面 $table->string('title', 40); //標題 $table->string('position', 20); //位置 $table->string('icon', 40)->nullable(); //圖示 $table->string('subtitle', 80)->nullable(); //副標題 $table->string('content', 2000)->nullable(); //內容 $table->string('url', 255)->nullable(); //網址 $table->string('url_txt', 100)->nullable(); //網址文字 $table->string('pic', 255)->nullable(); //圖片 $table->string('video', 255)->nullable(); //影片網址 $table->string('alt', 100)->nullable(); //替代文字 $table->integer('sort')->default(0); //排序 $table->boolean('enabled')->default(true); //是否啟用 $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('elements'); } } ``` 我們就用它來建立Migration檔案 開啟Terminal 輸入以下指令 `php artisan make:migration create_elements_table` `php artisan migrate` 完成後確認一下表格是否正常生成 接著就要開始Voyager的功能設定作業了 在進到BREAD的設定實作之前先簡單的說一下 在Voyager裡頭兩個很重要的表格 分別是 data_types 以及 data_rows 這邊說明一下DataType以及DataRow的關係 每個資料庫表格都會有一個DataType來紀錄該表格的BREAD設定 而每個DataType擁有多個DataRow來說明各欄位的BREAD設定 進到後台開啟 BREAD 功能 這時候 elements 的 BREAD 功能還沒建立 先來建立它 接著開始設定 elements的 BREAD > BREAD 設定說明 完成設定之後,你就有個CRUD介面可以使用囉 我們就開始建立元素資料 把前台的內容填進去吧 > 填寫網頁元素資料 資料面已經準備好了 再下來我們調整控制器 請控制器到後台抓取資料後再傳進View裡頭 ``` //app\Http\Controllers\SiteController.php public function renderDemoPage(){ $items_slider = Element::where('page', 'home')->where('position', 'slider')->where('enabled', 1)->orderBy('sort', 'asc')->get(); $item_row3_top = Element::where('page', 'home')->where('position', 'row3')->where('mode', 'txt')->where('enabled', 1)->orderBy('sort', 'asc')->first(); $items_row3 = Element::where('page', 'home')->where('position', 'row3')->where('mode', 'imgText')->where('enabled', 1)->orderBy('sort', 'asc')->get(); return view('demo',compact('items_slider','item_row3_top','items_row3')); } ``` 接著修改 View 視圖 把原本寫死的文字改成抓取控制器傳來的參數 ``` //resources\views\demo.blade.php ``` 完成之後,開啟瀏覽器輸入專案網址以及demo路徑 看看網頁上的內容是否正確 --- 另外BREAD可以說是Voyager的核心 透過剛才的展示沒辦法把所有細節講完 建議大家可以去參考我整理的Voyager中文技術手冊 --- ### 示範 Voyager 的選單管理員 接下來這一小節 我們要示範如何利用Voyager來管理前端的選單 目前前端的選單結構都是寫死在Blade檔裡頭 但其實Voyager就有個選單管理員可以來幫助我們管理選單 接著我來展示該如何使用 > 主選單建立示範 #### 示範腳本 完成了選單的建立接著就可以回到前台來叫用囉 這裡就可以先將選單的程式碼先註解掉改成以下的程式碼 `{{ menu('frontend')}}` frontend就是我們剛為選單所取的名字 完成之後,開啟瀏覽器輸入專案網址以及demo路徑 看看網頁上的主選單是否有出現內容 你會發現內容確實有出來但遺憾的是格式卻跑掉了 怎麼辦呢 你不用擔心 Voyager早就為你想到了 因為大部分套版都有自定義樣式類別 如果沒在標籤中加入這些樣式類別就無法正常出現 因此我們必須要新增一個選單視圖並告知menu()要使用它 請在views資料夾建立一個menu子資料夾 並在裡頭建立primary.blade.php 檔案 裡頭程式碼像這樣 ``` //resources/views/menu/primary.blade.php <nav class="nav-menu float-right d-none d-lg-block"> <ul> @foreach($items as $item) @php $sub2menu = $item->children; @endphp @if(isset($sub2menu) && count($sub2menu) > 0) <li class="drop-down"><a href="{{$item->link()}}">{{$item->title}} </a> <ul> @foreach($sub2menu as $sub2_item) <li><a href="{{$sub2_item->link()}}">{{$sub2_item->title}} </a></li> @endforeach </ul> @else <li><a href="{{$item->link()}}">{{$item->title}} </a> @endif </li> @endforeach </ul> </nav> ``` 再回到前台視圖 把menu()加入第二參數 也就是選單視圖改用menu資料夾的primary `{{ menu('frontend','menu.primary') }}` 完成之後,再開啟瀏覽器輸入專案網址以及demo路徑 看看這次網頁上的選單是否格式就正確了 --- 這個技巧除了可以用來製作上方的主選單 下面的Footer選單同樣可以舉一反三 用Voyager選單管理員來製作唷 --- ### 示範 Voyager 設定管理員 最後這一小節 我們要示範如何利用Voyager來管理前端的參數 比如電話號碼.社群連結與地址等等 > 設定管理員示範 #### 示範腳本 目前這些資料都同樣寫在視圖內 修改較為不便 我們將透過Voyager的設定管理員來幫我們管理這些設定 將前台的電話和Email這兩個設定移到後台去 進到Voyager後台的設定管理員 在frontend這個群組加上phone和email這兩組設定 > 在設定管理員加入設定 完成之後預設你會看到旁邊有程式碼提示 告訴你可以怎麼去取得設定 因此你可以把這段複製起來 貼到前端視圖替換掉原本的內容 當我們把這些內容全都替換完畢後儲存 再開啟瀏覽器輸入專案網址以及demo路徑 看看這次網頁下方的聯絡方式有沒有正常顯示 --- 透過這次的一頁式網頁實作 我們展示了Voyager的BREAD 選單管理員以及設定管理員的使用 並簡單示範如何與Laravel結合 如果這個單元的示範 你覺得意猶未盡 不用擔心 我為大家準備好了EzLaravel套件 裡頭的demo頁有今天這個示範的完整程式碼供你參考 關於EzLaravel套件的使用說明 請參考資訊卡或底下資訊欄 更棒的是這個套件不只是作為範例 你可以用它來快速建置你的網站 裡頭已經為網頁元素以及文章等表格建立了完整的BREAD設定了 連CRUD視圖都客製好 方便你提包入住 下一個單元我們仍將利用Voyager來為你示範更多應用 如果有你想知道而我沒展示的 請在底下留言 也許下個單元我就會製作你要的應用囉 如果今天的示範教學你覺得有幫助的話 希望你能夠訂閱我們頻道並開啟小鈴鐺 以免錯過我為你製作的下一支教學影片 我是哥布林工程師,我們下次再見,掰掰 ## 影片時間軸 課程計畫 00:11 專案準備 01:30 前台套版導入 08:13 後台自動生成示範 13:48 動態選單製作 49:48 動態選單製作 57:25 更多好康 1:00:00 ## 參考網址 [Laravel5.8 從入門到實戰](https://hahow.in/cr/goblinlab-laravel58) [Moderna前台套版](https://bootstrapmade.com/free-bootstrap-template-corporate-moderna/download/) [課程筆記](https://hackmd.io/@goblinlab/SkDdTe4kO) [EzLaravel套件介紹影片](https://youtu.be/J5SjwZ2aY6c) [Voyager套件簡介影片](https://youtu.be/ZW4RLDDUuFQ)