by Devin Yang

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

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

需要登入才可留言!

類似的文章


dlaravel

D-Laravel 釋出 v1.1.5

因應Laravel 5.5推出了,剛好php也出了php 7.0.23及php 7.1.9版了。 D-Laravel使用的fpm版本也進行更新囉...只要調整您的docker-compose所定義的版本 即可使用最新的php囉...

docker,laravel,nfs

Docker在macOS上的NFS

D-laravel的nfs模式,在這篇文章您可以了解到,如何在macOS使用NFS+Docker。

docker, tinkerwell, tinker, laravel

Tinkerwell與docker環境運用

其實我最近不用Tinkerwell了,因為老是要我花錢更新。要測試直接ssh 主機不就搞定啦不是?