由於最近看 Laravel 都沒有用在實戰上面
想藉由這個機會時做看看
不寫還真的有些不習慣
特別紀錄一下
–尚未整理完–
Laravel 新增檔案起手勢
建立一個 Model
–migration 順便產生 migrate 檔案
Table 取的名會是複數
Table 取的名會是複數
Table 取的名會是複數
獎如是要自己新增的要注意!!!
1 | php artisan make:model Event --migration |
建立一個 Controller
1 | php artisan make:controller CustomersController |
--migration
我以為能順便新增 migrate
但是不行!!!
三個願望一次滿足
新建東西,想把所有 Controller 建立出來要怎麼用?
Laravel 5.4 create model, controller and migration in single artisan command - Stack Overflow
1 | php artisan make:model Todo -mcr |
-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
或者
1 | php artisan make:model Todo -a |
-a, –all Generate a migration, factory, and resource controller for the model
Model 要注意的事情
fillable
每次新增 Model 完成,但通常會忘記填這個東西
仔細看這個,這個變數是防止 input 帶入 model 裡面
會被塞入奇奇怪怪的值
某種意義來說就是安全性!!
關聯
hasMany <=> belongTo
hasMany
1 | public function comments() |
1 | public function post() |
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
1 | return view('page/week1/list'); |
可以用多個帶值到 View 裡面
可算說是非常方便
驗證起手勢
1 | $input = Input::all(); |
尚未了解事情
1 | // 非正確的時候會導入到首頁,目前找不到修改對應首頁方法,建議用Validator::make |
error 顯示方法
redirect()->withErrors
可以抓取到
1 | @if ($errors->any()) |
正如前面所提到的,Laravel 會自動把使用者重導到先前的位置。另外,所有的驗證錯誤會被自動快閃至 session。
同樣的,注意我們不需要在 GET 路由明確的綁定錯誤訊息至視圖。這是因為 Laravel 會自動檢查 session 內的錯誤資料,如果錯誤存在的話,會自動綁定這些錯誤訊息到視圖。所以,請注意到 $errors 變數在每次請求的所有視圖中都將可以使用,讓你可以方便假設 $errors 變數已被定義且可以安全地使用。\$errors 變數是 Illuminate\Support\MessageBag 的實例。有關此物件的詳細資訊,請查閱它的文件。
success 方法
內建沒有 WithSuccess
但還是可以塞自己想要的資料
1 | return redirect()->route('week1.edit', ['id' => $id]) |
1 | @endif @if (session()->has('succes')) |
上面也可以用@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 選擇
1 | {{ action('EventController@edit', ['id'=>1]) }} |
我選擇用 route
打很少字,就算之後要換檔名不用修改很多檔案裡面的內容
可以算是非常方便
用 Laravel Mix 記得加 meta csrf
1 | <meta name="csrf-token" content="{{ csrf_token() }}" /> |
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 | DB::transaction(function () use ($input, &$is_save) { |
服務容器
- 从 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 會遇到1
Please remove or rename the Redis facade alias in your "app" configuration file in order to avoid collision with the PHP Redis extension.
使用 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
1 | // Generate basic scaffolding... |
blade
使用 Laravel Navbar 做 selected 設定
1 | <ul class="nav nav-second-level"> |
or1
2
3
4
5
6
7
8
9
10
11
12 <div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">WebSiteName</a>
</div>
<ul class="nav navbar-nav">
<li class="{{Request::is('/')?'active':''}}"><a href="{{url('/')}}">Home</a></li>
<li class="{{Request::is('/page1')?'active':''}}"><a href="{{url('/page1')}}">Page 1</a></li>
<li class="{{Request::is('/page2')?'active':''}}"><a href="{{url('/page2')}}">Page 2</a></li>
<li class="{{Request::is('/page3')?'active':''}}"><a href="{{url('/page3')}}">Page 3</a></li>
</ul>
</div>
</nav>
- 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 台灣