Skip to content

Zeroplex 生活隨筆

軟體開發和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: PHP

Laravel v7.0 新功能

Posted on 2020 年 4 月 21 日2021 年 3 月 12 日 By 日落 在〈Laravel v7.0 新功能〉中尚無留言

從官方網站整理下來:

Airlock

使用 Airlock 可以更輕鬆的支援 single page application (SPA)、token-based API 等等,同時也可以針對 token 設定可存取犯元 (scope)。 (感覺上類似 OAuth)

Custom Eloquent Casts

以往使用者從 Eloquent ORM 拉出資料以後,使用者可以自訂 cast type,也就是說可用者可以自動 cast attribute 成特定格式。範例可以參考 Laravel 的 Pull Request。

Blade

新增不少功能來 render HTML。詳細說明請參考 Larvel Docs。

HTTP Client

為了史 API 更靈活,Laravel 使用 Guzzle HTTP client 來與其他 API 溝通。

Routing Cache

透過新的方式來做 route 的 cache,即使大型網站 (800 routes) ,route matching 的速度也可以比以往快上 20 倍。

Tags:Laravel, PHP

修改專案的 tag (version) 就可以毀掉其他專案

Posted on 2020 年 1 月 14 日2021 年 3 月 12 日 By 日落 在〈修改專案的 tag (version) 就可以毀掉其他專案〉中尚無留言

今天剛好要處理 Zip 檔,目前看到功能比較齊全的專案應該是 Ne-Lexa/php-zip,但是用 composer require 時卻發生 error message 大噴發:

仔細一看 …. 居然有「v9.99.99」的版號,該不會要世界末日了吧?

打開 comploser.lock 看一下是怎麼回事,追蹤後得知相依性如下:


laravel v6.10.1  <=  ramsey/uuid ^v3.7

ramsey/uuid  <=  paragonie/random_compat": "^1 | ^2 | 9.99.99"

兇手抓到了,看來在 paragonie/random_compat 有一個版本號是 v9.99.99,composer 會自動拉最新的版本號來使用,因此只要任何專案 require 時沒有指定版本編號,composer 就會自動把相依性對到 v9.99.99,如果其他 package 有關連到,就是直接 dependency conflict 了。

要處理掉這個問題,只要在 composer.json 也 require paragonie/random_compat,但是加上指定版本編號如 ^v2.0,這樣 composer 就只會拉到 v2.x.x 的版本,不會去用 v9.99.99 這個版本。

ref:

  • Versions and constraints – Composer
Tags:PHP, 程式設計

Laravel UrlGenerator 判斷 HTTP or HTTPS 的因素

Posted on 2019 年 10 月 7 日2021 年 3 月 12 日 By 日落 在〈Laravel UrlGenerator 判斷 HTTP or HTTPS 的因素〉中尚無留言

第一個要求 Laravel 要使用 HTTP or HTTPS (以下簡稱 protocol … 因為字太多了 .._Drz) 的方法,其實就是在「.env」做設定,例如:

APP_URL=http://zeroplex.tw

再來網路上應該會找到,要開發者在 AppServiceProvider 中加入設定:

URL::forceScheme('https');

這邊的 URL facade,可以從 config/app.php 中追蹤到,是 IlluminateRoutingUrlGenerator::class 的 alias,設定了 forceSheme() 以後,未來透過 UrlGenerator 建立的 link 都會是設定好的 protocol。

BUT …. 就是這個 BUT,若是遇到另一個其他的 method 來產生 URL (例如 IlluminateRoutingRedirector::route() …),這樣就可能吃到開發者設定的 protocol ,則由 Laravel 會自動抓進來的 request 來判斷該用什麼 protocol,若 application 剛好是靠 Nginx 在 handle HTTP SSL 的話,request 到 Laravel 這端時 HTTPS 就已經轉成 HTTP,導致 Laravel 以為 application 沒有上 HTTPS。

若要讓 reverse proxy 後面的 Laravel application 都固定用 HTTPS 的話,可以再到 app/Http/Middleware/TrustedProxy.php 去修改設定,讓 Laravel 識別 proxy 做出對應的動作 (給正確的 protocol)。

Ref: Laravel 5 force HTTPS issue with login routing to HTTP

Tags:AWS, Laravel, Nginx, PHP

MySQL 8.0 的新密碼加密 plugin 導致 PHP 連線失敗

Posted on 2019 年 7 月 30 日2021 年 3 月 12 日 By 日落 在〈MySQL 8.0 的新密碼加密 plugin 導致 PHP 連線失敗〉中尚無留言

今天很難得打開 phpMyAdmin 來看一下有什麼改變,但發現一直無法登入,顯示錯誤訊息「」。

查了一下才發現 MySQL 8 預設的密碼有多種格式,預設的格式 PHP 還不支援,所以會登入失敗 (但用 console 會成功)。

解決方法是暫時改為舊版本的密碼儲存方式:

alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password';
flush privileges;

然後在設定檔裡面多新增一條規則,把預設的密碼儲存方式改回舊版的:

[mysqld]
default-authentication-plugin = mysql_native_password

Tags:MySQL, PHP

使用 Eloquent migration 刪除有 key constrain 的 table / index

Posted on 2019 年 7 月 18 日2021 年 3 月 12 日 By 日落 在〈使用 Eloquent migration 刪除有 key constrain 的 table / index〉中尚無留言

建立 table 時可能會同時建立 foreign key:

$table->foreign('good_id')
    ->references('id')
    ->on('goods')
    ->onDelete('cascade');

$table->index('value');

這個情況下要直接 dropIndex() 是會出現錯誤的,要先把 key constraint 解掉再來刪除 index。

而 constraint key name 用 show index from TABLE 是看不到的,但是可以使用下面的語法看到 create table 時做的事情:

show create table NAME

看到 contrain key name 以後先用 dropForeign() 刪除,再 dropIndex() 即可。

ps. 記得事情處理完以後,要把 constraint 加回去喔

Tags:Laravel, PHP

文章分頁

上一頁 1 ... 9 10 11 ... 27 下一頁

其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows XD 作業系統 分享 好站推薦 專題 小提琴 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.