原來可以這麼寫(4) : 終於接新專案

近況

最近工作終於接到新的任務,雖然還是在同一個專案…..

事情是這樣的,我們那個專案的後台分成兩個部分的人負責,一個是後台、另外一個則是交易…..而我進來公司後,一直都是處理後台,對於交易都是一知半解,只知道要打Lambda 而已。而這次,在專案時程終於沒這麼趕的情況下,以統一後端接口(俗語說:天下大勢,合久必分、分久必合),我被授命要接下這交易功能的後續維護&開發新功能…. 這對我是一種挑戰,因為我終於可以有段時間不用繼續和PHP掛勾拉XD (交易lambda 是使用NodeJS)

況且,最近也剛學習了一點 NodeJS, 前陣子上完六角學院的 NodeJS 課程,很期待可以將自己新學習到語言運用到實務專案,不過之後還是要多多進修將nodeJS 補齊基礎拉,而且這個又是金流與交易,其實我自己說實在有點抖抖的&很興奮能接到此挑戰!

總之,為自己加油拉!而且其實也沒用到太高的技巧,那些 nodejs  其實還算好懂的

Mysql: COALESCE

因為在 trace 與理解交易商業邏輯的 code 當中,我看到我們用到COALESCE 在SQL語法中…原來,他是一個好方便的參數啊,可以回傳在列表裡的第一個非null的值。

例如

SELECT COALESCE(NULL, NULL, NULL, 'W3Schools.com', NULL, 'Example.com');
這行sql 語法就會回傳 ‘W3Schools.com’

相關可以參考的資料:https://www.w3schools.com/sql/func_mysql_coalesce.asp

沒用過還真的不知道可以這樣用啊!

強化與習得Docker技能

在今年初,看到Hahow 上面有個關於Docker 的新課程,在最近終於把那門課程上完了,雖然,自己本身工作就已經在使用Docker了,而且為了讓自己可以弄個舒服的開發環境,以符合自己早期的開發習慣,還自己簡單刻了 docker-compose.yml , 好讓自己資料庫可以用自己本機。(我們專案資料庫是用AWS RDS),所以早在上課之前對Docker 就有略知一二。不過,經過有系統的整理後確實能對Docker有更多的理解。像是中間會多了一個虛擬Linux container層,而每一個命令都是新的Container層而互不干擾,他的教學其實還蠻淺顯易懂的,我這裡可以推薦一下:Docker 部署入門完全指南-圖片速學攻略(https://hahow.in/courses/5df27f1fa5ee510022a08500/main)

不過之後還是會想研究一下,會有點想要像我們公司專案一樣,把 Laravel 部署到 Fargate 的部分……

小君曰:接到新專案囉,雖然還是在一刻(我們公司產品簡稱) XD

原來可以這麼寫(3) : 關於我的工作流程

來開始交代一周一次的功課了XD
希望技術部落格可以一周一篇文章, 提升更多的技術含量
記錄自己一天比一天更佳進步的軌跡

關於trello

trello 是很多Team會用到的一個工具,可以用來管理專案與任務安排
它真的是一個真的很方便以及很有幫助的工具
我的前一份工作和現在這一份都有用到這個trello

一開始進入公司的時候 我發現到他們trello 有 進行中, Todo , 完成後請檢察等等的分類, 然後用tag作專案上的分類, 用了一陣子之後發現他們這樣的管理方式真的很不錯

所以就應用在我的side project 管理上
不過我個人也對這樣的部分做了一個調整: 加入了一個研究中的list
畢竟做為小小工程師而言, 作side project 的目標除了是興趣與證明自己的實力以外
也是還要將一些新的東西應用與練習的麻~ 好幫助自己真的可以越來越進步

於是就來分享看看我這個trello 的 template 喔: https://trello.com/b/PFi72D78/r567tws-template

歡迎用我的template去管理你們的專案~
如果有甚麼改進的建議或管理好方法歡迎來告訴我喔

Composer scripts

本周也學到composer 可以在composer.json 裡面寫一些指令, 可以在安裝後,更新後或者安裝前,更新前可以寫command 執行

至於這裡就有豐富關於此的內容,這裡我就不贅述:https://docs.phpcomposer.com/articles/scripts.html

我看到這個的想法是: 哇以後那些php的初始專案就可以不用這麼麻煩了耶, 只要下載後, composer install 或 composer update , 就可以使用了……

我是一個很懶的工程師,也很不喜歡背來背去那些指令, 況且每次都要google 一下把指令們copy & paste , 真的很麻煩

有了這個東西,方便多了, 不用跑 cp .env.example .envphp artisan key:generage

不過也發覺, 原來我還不懂composer XDDDD
但還好啦, composer 就是一種工具, 有用到就會自然學到了
script 技巧 GET !!!!

接到新任務- rust 真的有點看不懂

最近接到新任務, 就是一個可以幫營運單位整理資料夾的任務, 好讓營運單位可以上傳整個資料夾, 而這個資料夾的整理, 是需要戴上資料庫的id , 而營運單位會給我們他們的原檔案, for example : 他們給我們a.mp3 ,我要幫他們找到資料庫 a.mp3 的資料id (例如 10), 那我就要幫他們a.mp3檔案複製存成 media/in/10/10.mp3

它其實真的很簡單: 就是先資料庫連線取得要被整理出來的id 到底是哪些, 然後就做檔案的管理這樣就好(而且我下午還有些時間被抓去開會, 討厭, 沒辦法專心寫程式)

至於程式碼之後我再補這樣 XD (雖然後來我們討論流程這個部分又改了ㄎㄎ 總之這段程式不會用到實務)

https://github.com/r567tw/office/tree/master/move_audio_files

我用python , 用了一個下午時間就寫完了, 隔天我還去找了python 有沒有那種.env 這種東西, 把env 導入我這個小小小程式, 也是不到幾小時的時間

因為還有時間, 我就想說來改寫成rust 的版本, 剛好前幾天在超級簡單的看rust 的東西, 發現…. rust 真的有點看不懂, 那個連結 mysql 的範例…. 感覺有點不好懂…. 需要一段時間我才能將python 語法轉換過去。不過 反倒golang 的範例就沒有那麼難懂….

不知道是不是因為rust 比較底層的關係呢?

後記: 來分享我目前的吃飯工具們好了~

  • vscode:寫程式慣用的編輯器
  • sourceTree
  • Tableplus(偶爾會用workbench)
  • Skype
  • Slack
  • AWS
  • Postman
  • Chrome
  • Spotify
小君曰: 最近我家的PM常常有事沒事來找我, 說: 沒事, 專案(Server / API)還好好的.....

原來可以這麼寫(2):好久沒寫文章了

哈哈,  原本想說可以一個禮拜寫一篇技術文章的

但就是「懶」,所以到現在才出所謂的第二篇….

距離通過工作試用期也已經超過一個月了,我覺得工作上還算是得心應手,進度都在掌握中,也很喜歡目前的工作狀態,只是….我好想接新專案啊…..

在家工作心得

之前,因為疫情關係,我們公司試行了在家工作。老實說,這是我人生第一次在家工作。第一次的時候,還沒有待滿一個月…第一次,好慌、好亂….完全不知道在做什麼

但是,等我慢慢熟悉專案與產品、進度也漸漸掌握起來了,第二次試行、第三次試行,搞清楚自己目前的戰鬥位置、狀況,突然覺得,在家工作好棒啊,甚至有點享受、開心!只要我進度在掌握中就好拉,也確實,我也漸漸掌握好專案的進度XD

可惜,台灣疫情控制實在太好了,之前公司試行在家工作的制度就這樣無疾而終。

我好想要繼續在家上班啊…

結論:在家上班的前置工作與預備真的要做好

Mysql function/trigger

在做搜尋API這個功能時,因為原有資料庫欄位的設計限制與需要,欄位存了HTML標籤,但這反而造成我們在搜尋類似‘p’這種關鍵字時,會變成所有的資料都被回傳,形同沒有搜尋….  那時還算菜… 同事後來找到一個解法,就是新增新的欄位,利用Mysql function 的功能,再加上trigger , 可以在每次資料庫有異動時,新的欄位可以放入沒有html標籤的原資料,從而在API開發上,搜尋這個新的欄位,就可以克服這個問題

我以為只有oracle 資料庫有這種trigger 功能,因為我以前有在學校上課有修過這個oracle資料庫的課,所以對這個略知一二,但沒想到Mysql 也有這樣的功能,於是花了一點時間重新複習,把以前上課的回憶都找回來了啊… 而網路上,也有幫忙去除html 標籤的現成function,  配合trigger 的onupdate & oninsert , 再配合sql 語法將現在線上資料的html標籤去除,  真的是一個不錯的方案….不過如果你知道有更好的方式解決,歡迎告訴我&交流~

windows docker  問題

因為公司產品有使用到docker, 另外我在公司配備的是 windows電腦 (好想要被配備mac啊~~),於是在某次午休回來時,發現為什麼我的API 會出現問題?明明token , 程式都沒什麼問題啊… 後來我發現好像原來是docker 在windows休眠之後醒來後, docker內部container的時間會和外部window 不是一樣的,因為我的專案有調用到aws的api , 在時間不sync的情況下當然api就出錯了…. 我記得有搜尋到某篇文章說怎麼解決那個問題,好像到window設定什麼東西的….  總之,那是之前遇到的,我也不知道我那時的紀錄丟到哪了,現在我寫文章的時候一直找不到XD  但我說一下我的解法:因為文章裡面交代得實在太麻煩了,於是我決定:重開docker 大法 哈哈哈

Laravel env 問題

我在開發時候,有時候調用一些env的資料, 後來發現, 為什麼都調用不到… 經查詢後發現,原來是因為執行了php artisan config:cache的指令關係…. 詳細可以看看這篇文章:https://learnku.com/laravel/t/3362/laravel-use-env-to-read-the-environment-variable-null

結論:媽的,坑….好拉, 對不起,我沒好好認真看文件所以犯蠢….

Laravel 的queue 和玩玩 graphQL

剛好專案有用到, laravel 的queue 功能, 我預計之後為這個寫一篇專屬文章筆記一下這個, 以後面試可以大膽說用到queue了哈哈

然後因為進度超前及在掌握中,有一些空閒的時間,研究一下之前開發者還沒研究出來的GraphQL, 我裝了rebing/graphql-laravel, 原來,graphQL 是這個樣子…..  在這段時間,比起之前對graphQL有更多更深入的認識了, YA ~

小君曰:真的很久沒寫文章了

原來可以這麼寫(1):新工作第一週

去年的12月,我從上一間公司離職。其實,一月是打算好好去玩~

突然覺得自己韓國去得真是很好的時候,不然可能回來就要自行隔離幾天了XD

想知道韓國旅遊心得的可以到我的樂在信仰中喔:https://r567tw.tw/2020韓國之旅/

然後二月就是各種找工作、思考要做那些工作…..然後各種的無聲卡、拒絕、邀請進去…。

有一家做博弈的接案公司最誇張,其實我本來就沒打算做博弈了,去面試也只是想說「以戰養戰」的態度、寫寫題目,看看有沒有需要再精進的…(是說這間在話術上也很厲害,在頁面其實沒有看到博弈,他們也說他們不標榜自己是博弈,只是接案剛好有大部分都是接博弈的……),然後我就隨意地寫寫,甚至幾題我是空白沒寫,想說記起來回家研究怎麼寫會更好…結果超好笑的是下禮拜居然還發給我錄取通知….(到底有多缺人Xd)

還有一間是說我們「氣不合」,這個理由真的很靠杯,雖然我也知道面試這種事其實與技術能力沒有太大關聯,技術能力只是代表你能帶多少籌碼,最重要的還是面試官喜不喜歡你麻~ 但直接用「談論起來氣不合」這種直白的理由真的會覺得很不尊重面試者,這間公司的名稱就不公佈了,想知道可以私訊~

總之三月之後正式工作,進入了一間大型傳統機構,薪水上蠻滿意的。不過我想先等三個月培訓期度過了在公開自己在哪裡好了,不然培訓期沒過真的會很好笑很尷尬XD

不過我覺得是時候應該要好好記錄工作上的筆記與東西了,畢竟有紀錄有籌碼,這樣下次在跳、再找也更有話可以嘴,同時也是一種回顧自己進步的軌跡的概念~

有一句話我很喜歡:「Don’t Prove; Improve」連結

話不多說,這個系列的文章就叫做「原來可以這麼寫」,紀錄我看前輩、同事的code的筆記、以及一些工作上學到的新概念、新技術~然後後面的標題可以自行發揮創意,像這週就比較沒創意:新工作第一週!

(1) 原來可以直接創造一個class…

trait TraitA {
     public    function   HelloWorld(){
           echo'Hello World';
      }
}
trait TraitB {
   public   function   HELLOTWO(){
       echo'hELLO tWO ';
    }
}
$helper = new class {
      useTraitA,TraitB;
};;
$helper->HelloWorld();

 

(2) ‘<=>’ 運算子

這個很少遇到,沒寫道真的不會記得~

他會比較兩邊的值,然後會回傳0,1,-1

至於規則可以參考:https://www.php.net/manual/zh/language.operators.comparison.php

 

(3) filter_var

https://blog.xuite.net/coke750101/networkprogramming/57002113-PHP+filter_var%28%29+%E5%87%BD%E6%95%B8Filter+%E5%87%BD%E6%95%B8

 

(4) AWS

1. ECR: 類似aws方提供的docker hub
2. KMS: 加解密服務
3. Lambda : 微服務的部分
(5) 匿名函數
“`
$gifts->sort(fn($a, $b) => $b->created_at <=> $a->created_at)->values()
// 越後面的日子就會排越前面~
“`
小君曰:這能這個系列應該會是週更,但有可能會是月更,阿不管啦,我想寫就寫啦XD

將鐵人賽的文章搬到部落格

好久沒有寫文章了,清清一下灰塵~

不過眼尖的會發現,目前我的部落格裡面也包含了前兩次我參加it鐵人賽的文章。因為後來我起了一個python爬蟲爬我自己鐵人賽的文章,然後發出request給自己的部落格新增文章。不過在之前要啟用一下自己的部落格可以開放網路發request用,所以要安裝一個package:Application Passwords plugin

詳情的話可以參考這篇文章:https://www.yannyann.com/2018/09/wp-rest-api-create-new-post-and-upload-image/

然後我的相關程式碼放到我的office 那裡了:https://github.com/r567tw/office/tree/master/ItHomeToTechBlog

小君曰:完成今年一大目標,打勾✔️

 

 

今年的回顧與未來規劃

感謝在公司這陣子的學習

今年學習很多新東西,尤其學習Angular, ionic ,並且在公司也有相關開發專案的經驗,撰寫關於PHP TDD 的Guildline、然後在今年底離職前大概也有一些學習認識DevOps的知識:例如學習怎麼使用AWS、認識Terraform

為什麼要離職呢?其實說真的個人也不太想(這麼不穩定),但就是公司的方向與我預期的有所變化。自知如果以php後端工程師而言,在這裡顯然是蠻難繼續下去的……。然而我也知道啦,一個人也不太可能真的靠「一個語言」打天下,但就現在的我而言,就是暫時不!想!轉!麻!

或許給我再多一點薪水,可能我就願意轉去Java或者.Net吧? 哈哈也要碰到才會知道

總之回想在這間公司的工作經驗,我開始玩轉到怎麼去接第三方的API(玩Stripe、玩Zoo,)、認識到Magento這個商務平台,說真的一開始真的學習好多好多,自己也很有收穫、開始真的使用到git-flow,如何與其他工程師合作、感受到前後端分離的魔力等等等…

雖然有些專案因為客戶的不了了之而感到可惜的未上線,但至少都是個過程,至少我不會那麼害怕看API文件了(但小小聲說:真的有些公司的API文件寫的真他媽超爛,有一次踩了很大的雷,花了好幾天才能把問題排出掉….我的人生啊~~)

另外更主導新功能:與Vanilla Forum SSO、Thinkific SSO的整合… 對於第三方登入、Oauth、JWT有更多的經驗與學習啊,但我覺得還是有很多可以進步、磨練的空間,另外也可能真的是沒有什麼事情做了,所以最後叫我學習關於PHP/Laravel的TDD,學習PHPUnit,撰寫關於TDD 的Guildline。

相較於第一份在師大擔任資訊助理只玩轉過Google distance api 的我,我有自信也確認在API串接這部分成長了不少。

對於Magento 這個平台,更學習到如何寫自製的plugin、以及對他有初步上的相見歡,
然而我也要說真的,這東西的坑真的很多,我個人以後實在不太想再碰到它。(也剛好公司之後也越來越少接這相關的案子)

可惜的是公司其實後來越來越少PHP相關的案子,所以後期我處理較多官網、wordpress的案子,不得不說那陣子CSS 能力大增、對wordpress也有更高的掌握度(笑~ 但其實我不是很喜歡CSS 啊~)

認識到Webhook的概念、更深入的理解SSO的學問,這些都是我帶得走的能力
或許,經驗的累積似乎真的能帶來程式能力上的進步吧~

未來的計畫

其實,我還是希望自己可以寫php(不然我不會離開這一間公司),
當然我也知道,作為一個工程師,一生當中不可能只靠一個語言打天下,說真的,最近真的有點考慮是否要學習JAVA…不過最近也快年底了,大概也粗略的羅列關於未來自己的技術成長計畫,說真的好多,還沒有排好優先順序,可能也要思考要怎麼整理與調整啊

  • 關於自己的部落格

其實今年,有玩轉過一次Cloudflare ,但後來因為網易主機商的更換導致cloudflare 壞掉,有一陣子害這兩個部落格都動不了呢!有點氣氣氣氣氣…. 不過等到我後續找工作穩定、可以拿到比較理想的Pay 之後,或許可以考慮換到比較穩定的「siteground」,其實,我一直都蠻想換到一家外國、知名的主機商。

剛好之前因為都在管理、評估Wordpress的案子,發現wordpress 有自帶多站式的功能,說真的對於我這個有兩個部落格在管理的使用者來說,實在蠻想要體驗這功能的,或許等到換到Siteground,會試試看的。

至於文章的部分,由於去年以及今年都有參加鐵人賽,因此個人很希望可以將那些鐵人賽的文章搬到我這個部落格來增加內容,或許,之後會寫更多Laravel進階的文章來挑戰一下自己吧!

  • 技術學習

當然PHP、Python、JavaScript 的深入學習是必要的,為此,我也整理一系列的學習清單,甚至最近開始整理自己的Knowledge Base ,也就是一些筆記、沒有整理過的,當然,如果有我覺得可以值得拿出來分享的就會整理好一篇文章放在這裡。原本一直在思考這個Knowledge Base 要放在Dropbox paper 還是 HackMd…後來想了一想,乾脆放到我的Bitbucket 吧,用Git 做管理:https://bitbucket.org/r567tw/deeper_knowledge/src/master/

歡迎大家去看看呦~ 我想未來我會好好去整理他、更新他的。

  • ios

其實我的心裡還是很想能夠出來一個ios 的app,可惜之前的技術學習計畫以及工作繁忙這個東西一直完成度很不高,既然到了新的一年,再度把它拿出來,好好努力看看吧!希望今年會成功!

 

小君曰:或許以後每一年都可以來寫一個回顧感恩來問問自己成長了多少?

賽後小感想以及後續學習

終於來到這最後一天,然而人家最後一天都在寫些感言充廢文,我在這一天還是要稍微帶點技術含量的東西ㄎㄎ

以下東西很多又很雜,畢竟 php 就是義大利麵嘛(大誤),請耐心閱讀~

Laravel Best Practice

介紹一個 Github 專案:https://github.com/alexeymezenin/laravel-best-practices

裡面介紹很多建議的 Laravel 寫法,例如驗證不要寫在 controller 裡面,而是用 Request 類別作為包裝,在寫 Laravel 的時候可以根據這些原則檢核一下自己

Laravel 遇上大架構

當 Laravel 遇到大架構的時候,基本上我們不會把這些東西都只是塞在 Model\Controller\view 當中,而是會使用到 Repository、Service、Presenter 或 Transformer 做包裝,分別控制資料庫邏輯與商業邏輯、顯示的邏輯和格式的回傳,讓程式更加容易維護、易讀

大架構的部分說明你可以參考以下網址:

可以讓 PHP 偉大的其他東西

其實只學會 Laravel 不足以讓 PHP 偉大啦,不過我期許自己是能夠成為越來越強的 phper 的喔!希望你們也是^^

1.學習 swoole:據說這是可以讓 php 效能 up up 的工具框架,是現代 phper 值得學習的一項東西,也是可以讓 php 邁向異步時代的重要推手

2.學習 composer:我還能說什麼呢?沒有 Composer 別跟我說他是現代 php 框架 XD

2.學習 lumen、slim: 剛剛學過 Laravel 一遍了,他就是這麼的肥這麼的胖,所以如果能學會幾個微框架是不錯的,對應 Laravel 來說,Lumen 就是他的簡易版,相信學會了 Laravel 以後,Lumen 上手應該不是什麼太大的難事。

如何學好 php

其實我覺得網路上的資源太多了,容易眼花撩亂而且有時候還會學到舊的。我個人是建議以下這些資料

我個人只推薦這幾個資源,其他就不必了。因為這些資源是可以讓你比較能夠學習現代php的方法與資源。

Laravel 相關資源

  • larvel news: 每週都會寄給你 Laravel 界相關資訊,你也可以加入他的 Procast,順便練習英文聽力
  • Diving Laravel:一個深入 Laravel 核心的部落格,會講到 Queue、job 等等較為進階的功能與核心解釋等。

賽後感言

其實一開始還卡在題目到底要選什麼…然後就咚咚咚的到開賽前一刻才決定好,於是成為了時間驅動寫作,也因為自己的惰性使然,其實有點虎頭蛇尾,自己都覺得自己好像沒有寫的太好……。只能說又學到這次的經驗了~

然後有別於去年我寫的 python,這次的 Laravel 似乎不怎麼討好…所以後面也越寫越沒勁兒,於是成為這樣小蛇尾,我自己應該好好檢討吧 XD

本人的技術部落格:https://tech.r567tw.tw/
歡迎使用 feedly 訂閱我的網站喔 XD

未來我會慢慢的將我鐵人賽的文章慢慢的搬過去我個人網站的,並且加以擴充、更新吧?!應該吧?!

Laravel 套件

今天將帶大家快速帶過幾個官方套件以及個人工作經驗上覺得好用的套件。並且後續也給大家相關的軍火庫可以在日後開發專案上用到。基本上有相對應的需求才用,可以搭配該套件的官方文件撰寫程式,這些基本上文件都很易讀,相信無痛上手是很有可能的喔!

官方套件 篇

首先我一定要先推薦一下 Laravel 官方提供的套件啦,就是這些套件形成 Laravel 一個龐大且厲害的生態系。

  1. Laravel Cashier(官方文件):一個關於金流的套件,他可以與國外金流公司 API 做無痛的結合,例如 Stripe 或者 Braintree,當然,如果台灣的話可以使用其他的套件,例如laravel-newebpay或者laravel-payum
  2. Laravel Dusk(官方文件):還記得我們之前的測試篇嗎?其實 Dusk 這個服務有點像是Browsers的測試,如果你看到文件你就大概明瞭,他是有點 for 終端測試的角色
  3. Laravel Passport(官方文件):一個快速建立 API 授權請求的相關套件,基於 Oauth2 標準
  4. Laravel Scout(官方文件): 一個基於 Eloquent Model 所建立的全文搜索相關開發套件,並且預設以 Algolia 作為驅動
  5. Laravel Socialite(官方文件):我們在網頁註冊的時候,常常看到 FB/Google 一鍵登入對吧?其實實作 Facebook,Twitter,LinkedIn,Google,GitHub,GitLab 和 Bitbucket 等等相關身份驗證機制並不難,這個套件可以提供你這樣的功能~
  6. Laravel Telescope(官方文件):本人認為史上最牛的開發調試工具,可以觀察資料庫、也可以觀察任務工作、Request/Respose 等等

另外還有很多其他的官方套件,不過我覺得很少用所以就不特別介紹了……

個人經驗 篇

  1. laravel-excel(官方文件): 一個可以方便操作 Excel 的套件
  1. laravel log viewer(官方文件):有時候我們會需要 Trace log 好幫助我們能夠 trace Request 或者 Response 喔喔~
  2. laravel-cors(官方文件):前後端分離,你會遇到的 Cors 問題~
  3. laravel-permission(官方文件): Laravel 界最有名的權限/角色管理套件
  4. laratrust(官方文件): 另一套個人覺得也沒好用的權限/角色管理套件,而且他比前面的 Laravel-permission 多支援 Group 的特色,好用!然後文件也寫得和 Laravel 易讀好用。
  5. Forms & HTML(官方文件): Laravel 在 4.x 的版本有所謂的 Form 的語法糖,但在 5.x 版本之後便移除了,很多人還想要繼續有這種功能,所以這個套件便出現了啦!

軍火庫

接下來,我要介紹一下 Laravel 的軍火庫

  • packagist :Laravel 使用 Composer,而 composer 使用的軍火庫也就是這個!
  • packalyst:類似上面的 packagist,不過這是專屬 Laravel 的喔!

Laravel: 遺珠之憾

剩下最後的三天鐵人賽,其實原本我有點想繼續寫下去的…但說真的有點有氣無力,如果你發現我最近這幾天的文章風格與教學,就可以發現我其實有點虎頭蛇尾了哈哈。

所以最後這三天將進入第三階段新的章節,也就是主要會再討論關於 Laravel 的套件、以及大架構、還有 Best Practice 等等的內容,雖然技術含量不高,但也就是我基於我所有的 Laravel 經驗全力輸出了!

不過我個人是還蠻喜歡看書的,在資訊界的領域當中,歐萊禮是很多人常常入門的資訊書出版社。所以這裡,我要學習歐萊禮的寫作風格,寫寫一些遺珠之憾,好讓大家不至於感覺有點一半跑掉,而是後續還能有些內容學習和追蹤。

  • Notifications
    Laravel 有一個類別是 Notifications,有別於我們之前寫到的 mailable 可以寄信,Notifications 可以寄送通知到其他服務,例如 Slack、簡訊、或者其他類似可以收取資訊的內容
  • Queues
    這個東西允許你將一個比較耗時的任務延後處理,好讓你的網頁服務不至於為了處理某些很複雜的請求讓後面在等待的其他請求全部 pedding,無法更快的反應。而他的背後又可以與 Redis 或者 Amazon SQS 等服務一起工作
  • Cache
    Laravel 是個全能型的框架,所以其實他的速度會很,所以 Laravel 允許你快取一些設定檔或者路由,好讓整個網頁的效能可以做個簡易的提升,像是php artisan config:cache或者php artisan route:cache之類的指令都可以做這樣的快取。
  • Frontend
    Laravel 的前端框架預設是Vue,然而,現在他也允許使用React了,在我們目錄底下有一個檔案是webpack.mix.js,還記得我們之前使用Auth的時候就有用到類似npm run build之類的指令嗎,其實就是動用這個檔案裡面的設定與調整。以及 resourse 裡面的 js 檔如何做出編譯也是這部分的課題。
  • Broadcasting(廣播)
    此類課題有點困難,我自己也私自下班玩過一次而已,這個東西其實需要配合前端以及相對應的套件,其中一個用途就是可以寫聊天室、或者與 Websocket 的結合,讓網頁也可以主動通知使用者
  • Event
    它提供了一個簡單的監聽器實作,允許你在應用程式可以訂閱和監聽事件
  • Laravel 及 Redis 相互搭配使用

明天我將分享一些生態系的官方套件以及自己之前工作經驗常用到的套件。明天見囉!

Laravel Collections

接下來,我想要分享關於Laravel 的一個比較特別的類別:Collections
他有點像是陣列的概念,但更像是一個集合的概念。

相信如果你還記得前面教學談到幾行的程式碼,裡面不是有Article::all$article->tags這幾段嗎?如果你去dd()它,你會發現他們都是同一種類別:Illuminate\Database\Eloquent\Collection

當然,如果你有在之前helper的章節發現到collect()這個方法,他其實回傳的也是Collection,但是他是Illuminate\Support\Collection

兩者在使用上會有一些差異,基本上他們也是大部分使用上也蠻像的,所以我就在這裡把他們放在一起講。

兩者使用差異可以參考這篇文章:https://medium.com/@lynnlin827/two-types-of-collections-in-laravel-888d43858c4e

Laravel為Collection這個類別提供許多的方法,例如map()或者avg()等等,其實和helper()那裏一樣,其實文件也大部分都寫的清清楚楚了。
https://laravel.com/docs/6.x/collections#available-methods

是不是有點像是在寫JavaScript在處理呢!沒錯,我也有這樣的感覺。但這樣似乎程式變得更好讀了呢!

另外Laravel在6.0也推出Lazy Collections的類別,是為了處理我們有時候會有大量的資料時候,避免一次全部讀進記憶體,使用到比較現代化的PHP技巧:yield 和 generator,而開發的一個新類別。其實使用方法很簡單,就是將我們原本使用的all()改成cursor()就完成囉!