基础信息
Laravel 与 PHP
Ruby on Rails
有以下原则:
- 强调与注重敏捷开发;
- 约定高于配置(Convention over configuration);
- DRY(Don’t repeat yourself)不要重复自己,提倡代码重用;
- 重视「编码愉悦性」。
如何正确阅读本书
随后你会有很多机会来学习它们。现在最重要的是保持『训练』的连贯性。
编程是技能,不是知识,技能只有在不断刻意练习下才会有进步。
开发环境布置
第一个应用
composer create-project laravel/laravel Laravel --prefer-dist "5.5.*" |
Git 与 GitHub
设置 push 的默认模式为 simple
git config --global push.default simple |
部署上线
注册 Heroku 后:
heroku login |
构建页面
静态页面
生成静态页面控制器:
php artisan make:controller StaticPagesController |
页面优化
样式美化
# 升级 yarn |
每次检测到 .scss
文件发生更改时,自动将其编译为 .css
文件:
npm run watch-poll |
Laravel 前端工作流
Laravel Mix 一款前端任务自动化管理工具。Mix 提供了简洁流畅的 API,让你能够为你的 Laravel 应用定义 Webpack 编译任务。
_header.blade.php
为局部视图增加前缀下划线是『约定俗成』的做法。
布局中的链接
<li><a href="/help">帮助</a></li> |
路由中修改:
Route::get('/help', 'StaticPagesController@help')->name('help'); |
route('help')
将被渲染为 http://sample.test/help
。
用户模型
数据库迁移
- 当我们运行迁移时,
up
方法会被调用 - 当我们回滚迁移时,
down
方法会被调用
查看数据库表
php artisan migrate |
模型文件
创建模型命令指定命名空间,同时顺便创建数据库迁移使用 --migration
或 -m
选项
php artisan make:model Models/Article -m |
『约定优于配置』(convention over configuration),也称作按约定编程,这是一种软件设计范式,旨在减少软件开发人员需做决定的数量,获得简单的好处,而又不失灵活性。如果所用工具的约定与你的期待相符,便可省去配置;反之,你可以配置来达到你所期待的方式。
创建用户对象
php artisan tinker |
用户注册
显示用户的信息
Laravel 遵从 RESTful 架构的设计原则,将数据看做一个资源,由 URI 来指定资源。
Route::resource('users', 'UsersController'); |
注册表单
全局辅助函数 old 来帮助我们在 Blade 模板中显示旧输入数据
{{ old('name') }} |
用户数据验证
为了安全考虑,会让我们提供一个 token(令牌)来防止我们的应用受到 CSRF(跨站请求伪造)的攻击。
{{ csrf_field() }} |
会被转换为:
<input type="hidden" name="_token" value="fhcxqT67dNowMoWsAHGGPJOAWJn8x5R5ctSwZrAq"> |
注册失败错误消息
composer require "overtrue/laravel-lang:~3.0" |
config/app.php
修改:
'locale' => 'zh-CN', |
注册成功
临时保存用户数据的方法 - 会话(Session),并附带支持多种会话后端驱动,可通过统一的 API 进行使用。
session()->flash('success', '欢迎,您将在这里开启一段新的旅程~'); |
会话管理
用户登录
Auth::check()
方法用于判断当前用户是否已登录,已登录返回 true,未登录返回 false。
记住我
Auth::attempt()
方法可接收两个参数,第一个参数为需要进行用户身份认证的数组,第二个参数为是否为用户开启『记住我』功能的布尔值。
用户 CRUD
更新用户
<form method="POST" action="{{ route('users.update', $user->id )}}"> |
权限系统
在 Laravel 中可以使用 授权策略 (Policy) 来对用户的操作权限进行验证,在用户未经授权进行操作时将返回 403 禁止访问的异常。
redirect()
实例提供了一个 intended 方法,该方法可将页面重定向到上一次请求尝试访问的页面上,并接收一个默认跳转地址参数,当上一次请求记录为空时,跳转到默认地址上。
return redirect()->intended(route('users.show', [Auth::user()])); |
列出所有用户
假数据的生成分为两个阶段:
- 对要生成假数据的模型指定字段进行赋值 - 『模型工厂』
- 批量生成假数据模型 - 『数据填充』
数据库的重置和填充操作:
php artisan migrate:refresh --seed |
邮件发送
账户激活
- 用户注册成功后,自动生成激活令牌
- 将激活令牌以链接的形式附带在注册邮件里面,并将邮件发送到用户的注册邮箱上
- 用户点击注册链接跳到指定路由,路由收到激活令牌参数后映射给相关控制器动作处理
- 控制器拿到激活令牌并进行验证,验证通过后对该用户进行激活,并将其激活状态设置为已激活
- 用户激活成功,自动登录
使用 log 邮件驱动的方式来调试邮件发送功能,这么做的好处是邮件并不会真正被发送出去,而是会出现在 storage/logs/laravel.log
文件中:
MAIL_DRIVER=log |
在生产环境中发送邮件
QQ 邮箱的账号设置里开启 POP3
和 SMTP
服务。
MAIL_DRIVER=smtp |
微博 CRUD
显示微博
diffForHumans()
该方法的作用是将日期进行友好化处理:
>>> $created_at->diffForHumans() |