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的sublime外挂以可由Package Control安装罗。

Mac或Linux的使用者,现在可由Sublime3的package control进行D-Laravel alias的包安装罗。 透过D-Laravel alias,我们可以使用更轻松的方式,运行容器内的artisan及composer命令。 docker的环境,要用composer安装包吗,不需再进入container内,或是设置composer的ce别名,即可在sublime中直接运行。

dlaravel

D-Laravel测试域名*.dev变更为*.test

由於Google Chrome 63会强制转换*.dev的域名为https了,D-Laravel新版的域名变更为*.test。 本文说明更新的方式。