https://xueyuanjun.com/post/769.html 超人与超能力 深入浅出IOC和DI的使用。
IoC(Inversion of Controller) 控制反转(概念)
DI(Dependency Inject) 依赖注入(IoC概念中的一种类型实现)
通过依赖声明自动实例化依赖的类(通常通过反射实现)
Container 容器
存储实例化对象 单例的一种实现工具
ServiceProvider 服务提供者
一次实例化一批(也可能是一个) 需要使用的类
并可做一个容器中对象的别名绑定
Factory 工厂
一个实例化类的对象 通过上层(框架)实例化
中间件的基本工作原理:接收 HTTP 请求,让请求经过定义好的路由中间件,最后到达目的地进行处理。
服务容器 ==》 服务提供者(provider) ===》 门面 ===》契约 ===》 模型 ===》 控制器 ===》 视图 ===》 中间件 ===》路由
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
- laravel 使用redis报错Class 'Predis\Client' not found
是因为在vender目录中没有自动下载此插件模块,具体解决办法有以下两种:
- 可使用命令composer require predis/predis下载,
- 也可修改redis的配置文件config/database中redis模块将'client' =>'predis' 修改为 'client' => 'phpredis'。
目前测试修改配置文件的方式来操作redis没有问题,除订阅事件未测试
门面是通过魔术方法__callStatic()来获取该门面中getFacadeAccessor方法返回对象或【类】【别名】字符串(获取容器中该别名所指向的对象)。
查看别名定义可使用辅助函数app()来查看别名定义。
Laravel Jetstream 是在之前版本的 UI 脚手架基础上进行的裁剪和优化,使用了 Tailwind CSS 框架,在 JavaScript 组件开发上,你可以按照自己的喜好选择 Livewire 或者 Inertia。
- Eloquent
《===》
Models resources/views 《===》 app/view 视图目录/视图名称.模板名(blade).php 《==》 视图目录/视图名称.html
访问路径查看路由目录routes。所有 Laravel 路由都定义在位于 routes
目录下的路由文件中,这些文件通过框架自动加载,相应逻辑位于 app/Providers/RouteServiceProvider
类。routes/web.php
文件定义了 Web 界面的路由,这些路由被分配到了 web
中间件组,从而可以使用 Session 和 CSRF 保护等功能。routes/api.php
中的路由是无状态的,这是因为被分配到了 api
中间件组。
定义在 routes/api.php
文件中的路由通过 app/Providers/RouteServiceProvider
的处理被嵌套在一个路由群组中,在这个群组中,所有路由会被自动添加 /api
前缀,所以你不需要再到路由文件中为每个路由手动添加,你可以通过编辑 RouteServiceProvider
类来修改路由前缀以及其他的路由群组选项:
/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('web')
->group(base_path('routes/web.php'));
Route::prefix('api')
->middleware('api')
->group(base_path('routes/api.php'));
});
}
我们可以通过路由器注册路由来响应任何 HTTP 请求动作:
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
有时候还需要注册一个路由响应多个 HTTP 请求动作 —— 这可以通过 match
方法来实现。或者,可以使用 any
方法注册一个路由来响应所有 HTTP 请求动作:
Route::match(['get', 'post'], 'foo', function () {
return 'This is a request from get or post';
});
Route::any('bar', function () {
return 'This is a request from any HTTP verb';
});
如果上面的路由是定义在 routes/web.php
的话,在测试 POST 请求之前,需要将对应路由取消 CSRF 保护检查,否则会返回 419
状态码导致无法请求成功,取消的方法是在 app/Http/Middleware/VerifyCsrfToken
中设置排除检查路由:
如果路由是定义在 routes/api.php
的话,则无需关注 CSRF 保护问题。背后的原因是因为 Web 路由文件中定义的路由都位于 web
中间件群组,该群组默认启用 CSRF 保护检查,而 API 路由文件位于 api
路由群组,该群组下的路由主要用于 第三方 API 请求,没办法进行 CSRF 检查,所以不需要做任何处理。