概念 单词
- 契约Contract 就是接口
- repository 仓库(封装数据访问,可以搜索:repository模式)
- Container 容器
- ServiceProvider 服务提供者
- Foundation 基础
$this->app->bind() 绑定契约(接口)
$app->make()
boot extend 覆盖 修改驱动
- 提示
- 英文单词的 动词,名词,单数,复数 不同地方用不同的单词.例如 seed和seeder
路由
## 生成资源控制器路由 ,命令里加上 --resoure 生成带crud方法的控制器
php artisan make:controller PostController --resource
#路由一次性绑定资源方法 curd等
Route::resource('post', 'PostController');
#模板内使用路由命名 生成url
<a href="{{ route('user.profile', ['id' => 100]) }}">
#控制器里使用 路由名字生成url
route('post.show', [$id]);
#路由分组,组内公用中间件 比如登录校验
https://laravelacademy.org/post/9612.html#toc_0
#兜底路由,
Route::fallback(function () {
return '没设置路由,会到这里';
});
#频率限制 利用内置的throttle中间件实现
Route::middleware('throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
视图
#在视图间共享变量
我们可以在某个服务提供者如 AppServiceProvider 的 boot 方法中定义共享的视图变量:
view()->share('siteName', 'Laravel学院');
view()->share('siteUrl', 'https://laravelacademy.org');
#通过数组指定多个视图组件
view()->composer(['partials.header', 'partials.footer'], function ($view) {
$view->with('posts', Post::recent());
});
视图
变量自动htmlentities转义防止xss ,如果不想自动转义用{!! $variable !!},例如富文本编辑器的代码;
#注释
{{-- 注释内容 --}}
npm和前端编译
npm install 安装 前端库
package.json 可类比为前端的 composer.json,我们通过 npm install 安装该文件中定义的依赖
运行 npm run dev 编译前端资源
大多数时候我们需要在 resources/js/app.js 和 resources/sass/app.scss 中编写代码,引入其它模块,然后运行 npm run dev 就可以了
框架重点
读一遍框架自带的服务提供者源码可以帮助你熟悉各种类是怎么绑定进容器的,都绑定到哪些键上。这是学习 Laravel 框架底层究竟如何运转的最佳实践。
开发
config
根目录.env
artisan
php artisan up
php artisan down
测试 分为 单元测试和功能测试
创建一个 .env.testing 文件
#执行测试
测试前清除配置缓存 php artisan config:clear
vendor/bin/phpunit
#运行单个测试用例
vendor/bin/phpunit --filter=UserTest
小提示
在开发与 Laravel 进行交互的第三方扩展包时,最好选择注入 Laravel 契约 而不使用 Facades 。因为扩展包是在 Laravel 之外构建,你无法使用 Laravel Facades 测试辅助函数
路由中间件
内置了 表单csrf,表单token
自定义中间件
#该命令会在 app/Http/Middleware 目录下创建一个新的CheckAge 类
php artisan make:middleware CheckAge
常见契约 Contracts
验证email, user包含 email_verified_at 字段
常见方法
only() except() all has exists
$request->input() 智能读取变量 支持json(需要header头设置application/json)
表单验证 $request->validate()
created_at
updated_at
Artisan 命令
#生成可调用的控制器
php artisan make:controller ShowProfile --invokable
#生成资源控制器 --resource参数自带curd方法的自动生成
php artisan make:controller PhotoController --resource
#创建模型 加上-m参数顺便创建迁移文件
php artisan make:model -m Models/Post
#模型工厂文件
php artisan make:factory PostFactory --model=Models/Post
#Schema 建立表
php artisan session:table
#执行数据迁移
php artisan migrate
#全部down,再次up,填充数据
php artisan migrate:refresh --seed
#回滚最后一批迁移
php artisan migrate:rollback
#回滚所有迁移,down方法
php artisan migrate:reset
#删除所有表 重建数据库(破坏性,如果有自己手动录入的表数据请不要执行此操作)
php artisan migrate:fresh
#删除所有表 重建数据库 并填充数据
php artisan migrate:fresh --seed
#生成数据迁移文件 创建新闻表
php artisan make:migration create_news_table --create news
#复杂表单验证 建立类去处理
php artisan make:request StoreBlogPost
#创建auth所需视图和控制器
php artisan make:auth
命令来生成密钥
php artisan key:generate
数据填充
#创建填充类对象
php artisan make:seeder PostsTableSeeder
运行填充器
编写好填充器类之后,需要通过 dump-autoload 命令重新生成 Composer 的自动加载器:
composer dump-autoload
运行之后可以使用 Artisan 命令 db:seed 来填充数据库。
默认情况下,db:seed 命令运行 DatabaseSeeder 类,
不过,你也可以使用 --class 选项来指定你想要运行的独立的填充器类:
php artisan db:seed
php artisan db:seed --class=UsersTableSeeder
你还可以使用 migrate:refresh 命令来填充数据库,该命令还可以回滚并重新运行所有迁移,这在需要完全重建数据库时很有用:
php artisan migrate:refresh --seed
#填充中文数据
$faker = Faker\Factory::create('zh_CN');
或者修改配置config/app.php 'faker_locale' => 'zh_CN',
Factory 只是生成了测试数据,但是插入还要 用模型和DB类去写;
数据库操作
DB:: 外观类操作数据库 查询构建器
where whereIn whereBetween orderBy first
https://laravelacademy.org/po...
https://laravelacademy.org/po...
模型 Eloquent ORM
https://laravelacademy.org/po...
Eloquent ORM 每个表对应一个类
模型有些默认规则,如果与规则不符,需要重新指定 如表名,主键名,时间戳,连接的库,
注:由于 Eloquent 模型本质上就是查询构建器,你可以在 Eloquent 查询中使用查询构建器的所有方法。
#生成模型文件,带上 -m 可以创建数据迁移文件
php artisan make:model Flight -m
组块结果集chunk
游标cursor
根据主键获取记录find $flight = App\Flight::find(1);//可以传数组查多条
获取单条记录first $flight = App\Flight::where('active', 1)->first();
如果无结果跑出异常findOrFail 和 firstOrFail
fillable guarded 二选一 赋值权限设置
控制器 中间件
部署后
#生成路由缓存,
php artisan route:cache
#清除路由缓存
php artisan route:clear
问题:
- 安装扩展 数据库报错
清除配置缓存试试 php artisan config:clear
- SymfonyComponentConsoleExceptionRuntimeException: Too many arguments, expected arguments "command".
执行单元测试的时候报的错,测试里写了执行一个 artisan 命令,命令写错了. 复制的命令是中文字符
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。