Laravel 實作小記
由於最近看 Laravel 都沒有用在實戰上面
想藉由這個機會時做看看
不寫還真的有些不習慣
特別紀錄一下
–尚未整理完–
Laravel 新增檔案起手勢
建立一個 Model
–migration 順便產生 migrate 檔案
Table 取的名會是複數
Table 取的名會是複數
Table 取的名會是複數
獎如是要自己新增的要注意!!!
|
|
建立一個 Controller
|
|
--migration
我以為能順便新增 migrate
但是不行!!!
三個願望一次滿足
新建東西,想把所有 Controller 建立出來要怎麼用?
Laravel 5.4 create model, controller and migration in single artisan command - Stack Overflow
|
|
-m, –migration Create a new migration file for the model.
-c, –controller Create a new controller for the model.
-r, –resource Indicates if the generated controller should be a resource controller
或者
|
|
-a, –all Generate a migration, factory, and resource controller for the model
Model 要注意的事情
fillable
每次新增 Model 完成,但通常會忘記填這個東西
仔細看這個,這個變數是防止 input 帶入 model 裡面
會被塞入奇奇怪怪的值
某種意義來說就是安全性!!
關聯
hasMany <=> belongTo
hasMany
|
|
|
|
Laravel 多張 table 使用 ORM 查詢 (遠層一對多關聯) – Bryce’S Note
Many to Many
我一直以為 X 對 X 就是講兩個 table,但是多對多簡單來講就是要用3個 table
而中介 table 命名為aaa_bbb
(照英文順序命名,如:bbb_aaa會有問題,但可透過 belongToMany(xxxx,‘bbb_aaa’))
簡單說一下,Many to Many 實作使用 3 個 table 但是只會寫 2 個 table(但 pivot 可自訂 class),詳細官網一下,但通常應該不用寫
使用上 attach,detach,sync 控制 pivot 內容
pivot 通常不會建立 id
欄位
當然要設定也是能做到
ORM with 預載入
只能用再 X 對多
Event()->timers() 出現找不到 function 問題
BadMethodCallException with message 'Call to undefined method App/Event::timers()'
哪尼我照官方範例新增一個 Project 怎麼會錯呢!!!
怎麼 Google 都找不到問題,最後我發現是protected
關係,要用public
為什麼呢? App\Event::find(1)
沒有 new 出物件
所以protected
的timers()
就呼叫不到!!!
這是很正常的
所以要用public
!!!
所以要用public
!!!
所以要用public
!!!
耗費一小時在查這個 orz
Model::find(20) 實現原理
這篇寫的很清楚
深入理解 laravel 中的 Eloquent ORM、查询构建器的核心原理 - 简书
命名建議
Form 表單這件事
我覺得網頁這個要熟悉
才能掌握網頁的程式
但是實作才了解 Laravel 我還不太了解
create 和 edit 拆開寫兩個 View
一開始實作我覺得應該有方法讓兩個 view 合併
我從書上 view 有一個 old()
函式可以呼叫 redirect->with 出來東西
但是 view 變數沒抓到(未定義)的時候,可能程式錯誤無法顯示問題
再繼續寫,我發現 from 表單我使用route
定義的時候
我發現一件事情,action 導去路徑不一樣
@method('POST')
和 @method('POST')
不一致
就算這些可以用邏輯去判斷網址
但我覺得會越來越亂
為何不如就分開兩個 view
其實表單重複的部分
我覺得可以用@include
帶入
不過我等熟悉看如何做到
contoller view
|
|
可以用多個帶值到 View 裡面
可算說是非常方便
驗證起手勢
|
|
尚未了解事情
|
|
error 顯示方法
redirect()->withErrors
可以抓取到
|
|
正如前面所提到的,Laravel 會自動把使用者重導到先前的位置。另外,所有的驗證錯誤會被自動快閃至 session。
同樣的,注意我們不需要在 GET 路由明確的綁定錯誤訊息至視圖。這是因為 Laravel 會自動檢查 session 內的錯誤資料,如果錯誤存在的話,會自動綁定這些錯誤訊息到視圖。所以,請注意到 $errors 變數在每次請求的所有視圖中都將可以使用,讓你可以方便假設 $errors 變數已被定義且可以安全地使用。$errors 變數是 Illuminate\Support\MessageBag 的實例。有關此物件的詳細資訊,請查閱它的文件。
success 方法
內建沒有 WithSuccess
但還是可以塞自己想要的資料
|
|
|
|
上面也可以用@if(isset($success))
注意with 除了寫 session 他也可以當view 變數名稱
Laravel 有關 with function 那些事情
一直看書看到有很多地方都有用到 with
不仔細看,我還以為他們都是一樣的東西
但是用在不同地方還是不一樣
orm with
之前我有小記,但我沒有用,有空來小記
總結要點:使用 Laravel 開發工具,ORM 查詢的 N + 1 問題 | Laravel China 社區 - 高品質的 Laravel 開發者社區
view with
這個等於 view()第二個參數帶到 blade 去
laravel5-example/resources/views/back/blog at master · bestmomo/laravel5-example
View 資料夾要如何分?
目前我只想到 layout ,page
但官方沒有限制
很多 Project 都不時一樣
laravel5-example/resources/views/back/blog at master · bestmomo/laravel5-example
redirect with
一直以為這個跟 view with 一樣
但是看一下原始碼
他是存在 session(flashdatg 下一個頁面就會清除) ,可以用 old 快速呼叫
原本我以為可以用 create 和 edit 共用同一個 view
但發現難度太高,因為 old(’name’,$event->name)
但是在 create 頁面就會掛掉
也許我可以在 create 做一個空event
?
有空試試看
withErrors 和 withInput 一樣的道理
action 和 route 選擇
|
|
我選擇用 route
打很少字,就算之後要換檔名不用修改很多檔案裡面的內容
可以算是非常方便
用 Laravel Mix 記得加 meta csrf
|
|
Console.log 好心提醒
CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token
Laravel 5.x 移除 html helper
不知道為什麼超多人還是有用
laravel 5 Form 和 HTML 的使用 - 袁超 - SegmentFault 思否
DB(ORM) 建立交易
需要抓到外面的變數可以用 use
|
|
服務容器
- 从 1 行代码开始,带你系统性地理解 Service Container 核心概念 | Laravel China 社区
- 从 1 行代码开始,带你系统性地理解 Service Container 核心概念 | Laravel China 社区
- Laravel 学习笔记 —— 神奇的服务容器 | Laravel China 社区
以上兩篇我看完小記的觀點,不一定正確,建議還是看裡面的內容。
我覺得這幾篇講的名詞都很抽象,所以不是很好懂(但是裡面這幾篇算是我找得最清楚的)
先講講我怎麼看裡面容器
我當初以為所有類別都是容器但其實容器應該就是指Container::getInstance
這一段類別
更深入了解 Ioc 和 DI 意思
我覺得可以看下面這邊
控制反轉 (IoC) 與 依賴注入 (DI) - NotFalse 技術客
感想
看完有種想把所有東西都塞到容器裡面?
但我後來想想應該不需要
我覺得容器有點像兩個 class 工通橋梁(如 Laravel app())
再透過 Facade 或 helper function 更加方便
同時兩個類別可以呼叫不同 class bind 後的實例
Laravel 如何實現依賴性注入? - 技術保鮮盒 - Medium
Repository
factory /seeder
Laravel - Seeding Many-to-Many Relationship - Stack Overflow
form checkbox
php - laravel 怎么接收和保存一组 checkbox 到数据库? - SegmentFault 思否
控制器依賴注入原理
授權 GATE & Policy
laravel5.5 授权系统 - archer-wong - 博客园
Redis
Laravel 6.2 使用 Redis::get 會遇到
|
|
使用 Cache::put
看似能用,但預設 env 是 file,切換到 redis,還是遇到一樣的問題
看似 Homestead 預設沒安裝 redis 套件
phpredis 需要改裡面程式內容
這邊有兩個做法
- 改成用 predis 方法(不推薦)
composer require predis/predis
1 Replace in config\app.php
aliasess:
‘Redis’ => Illuminate\Support\Facades\Redis::class,
for:
‘RedisManager’ => Illuminate\Support\Facades\Redis::class,2 Replace in config\database.php
‘redis’ => [
‘client’ => env(‘REDIS_CLIENT’, ‘predis’), //default phpredis
…
參考來源:https://github.com/laravel/horizon/issues/659#issuecomment-528569052
- 改成用 phpredis 方法
Homestead 預設沒有安裝 php redis 套件,所以需要手動安裝
不知道新版的 Homestead 會不會預設安裝?
可參考:Homestead 安装 PHP Redis 扩展 | Laravel China 社区 備份圖
相關資料:
Homestead 安装 PHP Redis 扩展 - 菜园子 - SegmentFault 思否
Homestead 环境没有 phpize 怎么安装 Redis 扩展??? | Laravel China 社区
Laravel 6 使用 Redis 注意事项 | Laravel China 社区
Laravel Help
Laravel Router 多人維護最佳方式
Laravel 分割 routes.php 路由文件的最佳方式 | Laravel China 社区
Laravel blade Javascript 設計
Laravel – 設計一個好的 Blade Template, 使用 @parent | 不怕就是強
一般設計
Jigsaw – Static Sites for Laravel Developers
Laravel 6 安裝 Bootstrap 6
composer require laravel/ui –dev
|
|
blade
使用 Laravel Navbar 做 selected 設定
|
|
or
|
|
- php - Setting Bootstrap navbar active class in Laravel 5 - Stack Overflow
- how to set bootstrap navbar class active - Scoopism
blade section/show
- 使用 @section (‘yourSectionName’)…..@show。子子孫孫都使用 @section (‘contents’)……@endsection 去繼承實現。
關於 @section…@show;@section….@endsection 的用法分析 | Laravel China 社區
其他
- php - prepare 与 sql 的开销? - SegmentFault 思否
- 使用 batch insert 解决 MySQL 的 insert 吞吐量问题 - billy 鹏 - 博客园
php - Laravel Eloquent compare date from datetime field - Stack Overflow - php 下 foreach()错误提示 Warning: Invalid argument supplied for foreach()_一聚教程网
- php 出现 Warning: A non-numeric value encountered 问题的原因及解决方法 - 傲雪星枫 - CSDN 博客
pjax
CDN
- app 接口设计 token 过期怎么使用_百度知道
- php ini - setting max_input_vars PHP.ini directive using ini_set - Stack Overflow
- Laravel Migration、Model、DB 物件 相關操作 (濃縮) - La Tech.
- Redis 禁用 FLUSHALL FLUSHDB KEYS 命令 - 星瑞 - 博客园
- Docker 使用 cron 定时任务 - 歪麦博客
- Laravel 模型关联 attach,save,sync 方法参数类型验证 - Coder_Chang 的博客 - CSDN 博客
- associate 的意义? | Laravel China 社区
- Laravel_使用 Passport 寫 API - 總有一天我要當超人
php - How to save in a polymorphic relationship in Laravel? - Stack Overflow
save() on polymorphic relation don’t work
模型关联 | 《Laravel Nova 中文文档》
[5.1] Saving morphTo relation. · Issue #11918 · laravel/framework
Eloquent 关系图例(译) | Laravel China 社区
laravel Carbon 函数 - 醒来明月 - CSDN 博客
如何使用 K8S 自動化定期 CronJob 抓網路公開資料 | TechBridge 技術共筆部落格
Kubernetes 中的 Job 和 CronJob,批量任务执行 - mark’s technic world - CSDN 博客
onlinereadbook/bookdocker: 線上 docker 讀書會
Repository Pattern and Service Layer – 佛祖球球
Laravel、Ruby on Rails、Django … 使用 Active Record Pattern 框架的最大問題:到底該把 save 寫在哪裡? – Devs.tw
批評 Active Record 的13個論點:最好用也最危險的 Anti-pattern | 轉個彎日誌
(1) Laravel 台灣