談談我第一次如何爲 Laravel 貢獻源碼

起源

  • 辦法總比困難多,因此發現問題比解決問題更可貴到。
  • 事情的起源是由於在調試一段模型事件時出現的,當時隨便往數據庫裏插入了一段字符串 ID,而不是標準的 uuid。而後發現個人模型事件中查找不到當前 ID 的模型。
  • 固然,咱們不可能老是能遇到問題,也有可能遇到了問題是本身的錯誤,這時候能夠去Laravel問題庫看一下本身有什麼能解決的問題

進展

  • 先排除了本身自己代碼中的錯誤,而後一步一步調試
  • 打印了一下返回變量,發現belongsToMany::sync方法返回的 ID 並不正確。
  • 進一步查看,這個整數大小,很熟悉,以爲應該是整數類型大小溢出了。而後看了一下源碼InteractsWithPivotTable::caseKey
  • 基本肯定就是整形數字溢出了,這裏只是簡單的根據變量類型進行強轉,由於 PHP 是弱類型語言,因此當長字符是一個數字字符串時,將致使沒法獲得正確的結果。
  • 但我在模型中已經設置了主鍵類型爲字符串,這不該該是我想要的結果。
  • 而後我向框架提了一個issues
  • Laravel 的組織成員tillkruss 告訴我能夠提交一個 PR
  • 而後本身立刻行動起來,說實話解決這個問題很簡單,由於只要獲取主鍵類型,而後進行強轉便可
  • 立刻提交了代碼,以後被駁回,原來是忘記了寫測試代碼
  • 查看了一下其餘數據庫的測試代碼,找了一個比較符合個人寫了一個數據庫的測試。提交。成功合併。
  • 具體修改的代碼,能夠查看這裏 5.7 Improve the return value of the caseKey method

結束

  • 第一次爲大型項目提交PR,確實感受到不能這麼隨意。
  • 寫代碼的時候請明確解釋這段代碼的緣由,你會發現框架當中不少不少的註釋
  • 千萬不要忘記寫測試文件
  • 當你提交PR的時候,請詳細描述你本次作了什麼改動,增長了什麼新功能。
  • 盡情的表達你的想法,社區有不少人會幫助你的 最後歡迎加入Laravel學習交流羣,羣號:584453488
相關文章
相關標籤/搜索