by Devin Yang

建立於: 3年前 ( 更新: 3年前 )

Laravel 8大改版,我的網站也跟著改版,我網站上的「筆記」及「文章」本來是分開兩個區塊的。
這次把他整合在一起了,反正也沒什麼文章,合起來內容看起來比較多。:p

我對文章的定義,就是內容較多較屬於原創的部份。
筆記則是隨手記錄,供日後查詢用,筆記可能原創或網路上抄來整理後的結果。

這次升級,分兩天進行,第一天是踩地雷升級後台,從5.7.28升到8.8.0,
由於Laravel噴錯滿明確的,修改起來並不難,只有在改後台的Routes時,邊改邊唸了一下下。
有跟我一樣升級的人,應該懂我在說什麼。
use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

還好我的Vim marco已到爐火純青的地步啦,大概三分鐘內搞定,壓空白自動改寫,
不由心中再次讚嘆Vim的巨集功能真是有夠好用。

另一天,進行前台套版大改版,但一切從簡。

本文單純閒聊,分享我怎麼改的,並不是教學如何升級Laravel。

如何升級Laravel,可以看看我的舊文章。
https://www.ccc.tc/article/how-to-update-ow-backend

這次升級,因為是大版號,所以我的策略也是直接裝一套新的,再把我的後台入到composer.json中。

但其實可以試試調composer.json中的版號進行升級哦 ,可以看看Laravel的Upgrade Guide.
https://laravel.com/docs/8.x/upgrade

提到Laravel版號,剛好前陣子有朋友問我過我,如何取得Laravel的版號,我順便貼到這裡吧..
$laravel_version=app()::VERSION;
以下ow_source就是我己做後台啦,透過psr4載入就能用了。
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/",
            "Ow\\Model\\": "app/ow_source/seo-model/",
            "Ow\\": "app/ow_source/seo-class/"
        }
    },
當然RouteServiceProvider要補上我自己後台專用的路由
public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));

            Route::middleware('owadmin')
                ->namespace($this->namespace)
                ->group(base_path('app/ow_source/ow_routes.php'));

            Route::middleware('owapi')
                ->namespace($this->namespace)
                ->group(base_path('app/ow_source/ow_routes.php'));
        });
}

以上講遠了,回到本文,前台程式碼部份,這裡我把區塊編號(b_ids)改為array了,
原本只顯示單一內容就變成可以直顯示多個區塊內容啦,不知怎麼的改Laravel改起來特別容易。
public function articles($bymonth){
$b_ids=[1,2]; //預設首頁的區塊
$queryStr = "";
if(!preg_match('/\d{4}-(\d?\d$)/u', $bymonth, $matches)){
return abort(404);
};
$bymonth.="-01"; //補上1號
$queryStr.=sprintf(" AND c_dt BETWEEN '%s' AND DATE_ADD('%s', INTERVAL 1 MONTH)", $bymonth,$bymonth);
$contents = Content::ofBlock($b_ids)
->whereRaw('1 = 1'.$queryStr)
->orderBy('c_id','desc')->get();
$archives = $this->archives($b_ids); //封存資料
//return $archives;
return view("$this->frontend.pages.index",[
'contents'=>$contents,
'archives'=>$archives
]);
}

本來是用where,改whereIn,就這麼可以用了@@,下方的Model可以看到,我改成whereIn。

另外,在下方內容Model中,為啥我要自訂table及primaryKey ,絕對不是我太閒或看起來比較厲害,
是因為我後台在Laravel之前就有啦,因此,所有的資料表欄位早就定義好了,
才會出現這種自訂$table及$primaryKey的情況,不然基本上我會採用Laravel的規則叫ID就好了,然後Table是複數。
 
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Support\Facades\DB;
class Content extends Model
{
protected $table='content';
protected $primaryKey='c_id';

public function scopeOfBlock($query, $b_ids)
{
    return $query->whereIn('b_id', $b_ids)->where('is_publish',1);
}


這次改版大概學到另一件事,就是我吐的資料都是相同的,不應該換個版連Controller都要換掉是吧。
所以,我把樣版的資料夾拉出來改動態了,以後要調整不同的樣版,改frontend就行啦。(開始計劃來搞個多樣版前台)
return view("$this->frontend.pages.index",[
    'contents'=>$contents,
    'archives'=>$archives
]);

這是我的修改差異

一切從簡後,看起來網站速度有明顯提升了,PageSpeed Insights有98分耶。


 

Tags: laravel

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!

類似的文章


laravel教學,blade

在我的Laravel的blade上打標籤

使用Laravel的Blade Templates相當好用,用久了還滿習慣的,但有一點就是當建立了很多的blade時,搞的自己似乎不太好找,在這裡提供了我最近的原創作法,如果雷同純屬巧合了。

laravel,oauth2

我最常用的Laravel passport指令

Laravel提供了相當多好用的Package,像Passport就是其中之一,當網站需要自架OAuth2驗證主機時,真的是省時省力。本站為例,因為採前後台分離機制(有兩個不同的Laravel專案),我都透過前台的WEB進行驗證。基本上,我還有很多其他不同的專案,也都靠Laravel提供的OAuth2就搞定跨域驗證。

laravel

奔跑吧Laravel

如果您還沒聽過D-Laravel,容我介紹一下,D-Laravel為採用docker-compose所建立的Laravel與docker執行環境, 透過簡單的bash讓我們快速生成Laravel的專案。 本文教您如何使用D-Laravel的提供的docker image,來建立swoole的執行開發環境。 看完這篇,您應該能快速的透過D-Laravel建立出swoole的執行環境囉。