新手入門
結構介紹
我們現在在 laravel v5.7
一起來看一下 laravel 專案的結構吧
app
大部份的網頁後端主要程式碼 也就是說他很重要
-
(Model)放在外面的大寫開頭們~
例如說User.php
就是, 他們是Model
,定義了資料庫的物件模式 -
Http/
- Controllers/
controller
可以作為路由進來後的流程控制器,可以想像它負責告訴大家要做什麼 - Middleware/
middleware
叫做中間層,用來包著你的程式內容,request 進出都會經過
- Controllers/
bootstrap
程式啟動第一個執行的套件
config
所有應用的設定檔們
database
顧名思義:資料庫~
- migrations/
紀錄了資料庫的心路歷程
其中定義了up
跟down
,模擬建立資料還有需要rollback回去時的動作 - fatories/
定義了一些資料的模式,可以使用seeder批量製造 - seeds/
他是一顆會長出資料的種子,當你需要產生測試用的資料的時候很常遇到他
public
對外公開給使用者看得到的資源
- Ex: 圖片、webpack包裝過的檔案
resources
本地資源
-
Ex: js的原始碼、CSS…
-
/assets
- /js/components
裡面寫了好多 vue component 們,他們是前端主力!
- /js/components
-
/views
這邊放了blade
,他是 laravel選用的模板引擎,幫你更智慧的寫你的html
routes
- api.php 裡面註冊API
- web.php 裡面註冊網頁
他們最大的差別就是套用了不同的middleware
storage
網頁被儲存的資源
- Ex: log日誌檔案(紀錄檔)、檔案快取
tests
測試單元、整合測試
大家都說用TDD比較快ㄛ
vendor
放別人code的地方
拿別人的code來用
laradock
它幫助我們使用docker
來建制服務
laradock/.env
存放 laradock的設定參數
其他檔案
.env
在這個網頁會用到的參數,像是資料庫的密碼artisan
放了些 laravel 的工作指令composer.json
composer 用在 php 的套件管理 當你需要幫你的 php 程式裝點別人的套件的時候,你會進來這邊看看package.json
javascript 的套件版本管理,還有 npm 指令喔webpack.min.js
webpack 會幫你打包前端的資源們
簡單操作 (by Xiao & Andrew & Dagg)
註冊路由
寫在 routes/web.php
這邊可以試著用你的路由連上預設的welcome首頁了
你要在postman測試的話 要關掉csrf防禦 app/Http/Middleware/VerifyCsrfToken.php
migrate - 開個資料表
php artisan make:migration crete_todoList_table
檔案會在 ./database/migration/ 檔名範例: 2018_01_22_170244_crete_todoList_table
column 建立說明 https://laravel.com/docs/5.5/migrations#creating-columns
寫個Controller
php artisan make:controller TodoListController
在 ./app/Http/Controller/ 會長出來
resource
如果你加上 –resource 的話,它會長出預設的幾個功能框框 而你可以在route裡面 Route::resource() 來管理他們 https://laravel.com/docs/5.5/controllers#resource-controllers
不得已用简体中文输入法的补充:
关于controller:
中层的class,管理http之间的行為( ex: get and post method )
另一种则是管理资源的class,管理对于资源的事件(ex: 图片的新增、修改、删除),
称為resource controller
每一个controller都可以注册一个路由方便管理
如果想要resourcecontroller继承特定model特性的话,
可以在指令后方加上 --model=[model name]
所以我們的結論:
API Controller + Model 的產生方法
php artisan make:controller TodoListController --resource --model=TodoList
如果不需要頁面的話 --resource
可以換成加上 --api
喔
php artisan make:controller API/TodoListController --api
用個model裝起來
php artisan make:model TodoList
會長出 ./app/TodoList.php
在裡面寫你跟資料庫的互動等等(static function)
然後你可以在controller裡面呼叫他們
Resource 打包你的資料
php artisan make:resource TodoList
:::info app/Providers/AppServiceProvider 裡面的 boot() 可以加上 use Illuminate\Http\Resources\Json\Resource; Resource::withoutWrapping(); 它會不包裝你的response :::
Collection 打包你的資料們
php artisan make:resource TodoListCollection
來灌些假資料
factory製造出假的資料、資料型態, seeder把他們寫起來
php artisan make:seeder TodoListSeeder
php artisan make:factory TodoListFactory
首先去DatabaseSeeder 的 run 裡面, 把你要跑的seeder註冊個
$this->call([
TodoListSeeder::class,
//other seeder
]);
再來是目標的TodoListSeeder 會用到factory回傳資料, 到 TodoListFactory 設計 這樣它會回傳5筆 fake 資料到資料庫
//call factory to fake data
factory(App\TodoList::class, 5)->create();
執行 DatabaseSeeder
中被指定的 seeder 們
./artisan db:seed
BLOG - 實作時間 (by Dagg)
建立Article的Model
為了建立存放文章的Model輸入指令:
php artisan make:model 'Article' --migration
同時建立該model的migration
管理Article的Model
class Article extends Model
{
protected $table = 'articles';
// $fillable 為可以填入的table
protected $fillable = [
'content'
];
}
建立Migration文件中資料表的欄位格式
- $table->increment(’_’); // 自動產生的key
- $table->longText(’_’); // 放置無限字元的欄位 例如:文章內容
- $table->string(’_’); // 放置255字元內的字串欄位
- $table->softDeletes(); // 建立一個判別軟刪除的欄位
- $table->timestamps(); // 建立時間標記的欄位(會建立兩個欄位,一個放建立時間一個放更新時間)
調整完你要產生的欄位行別之後在終端機輸入:
$ php artisan migrate
Controller
public function store(Request $request) // 建立一個store的函式 會接收Request
{
$article = $request->input('article'); //把Request的input丟進去$article這個變數裡面
$show = new Article(); // 建立一個新的Article物件
$show->content = $article; // 讓新建的Article物件轉成Request的input
$show->user_id = 1; // 紀錄user_id
$show->save(); // 把這個Article這個物件save
return 'Hi'; // 測試用寫爽的 想不到吧
}