laravel
===================================================================
Mysql or Collection to sort data
据说是数据库更快, 因为数据库更优化, 可以利用什么算法, 什么索引,如果是 php,
少量数据, 还是可以的, 但如果数据大的话, 会达到内存限制
===================================================================
model -> model builder -> query builder ->
===================================================================
===================================================================
===================================================================
===================================================================
===================================================================
===================================================================
===================================================================
===================================================================
===================================================================
1, index.php
2, 生成service container
3, service provider register/booted
4, dispatch routing
5, middleware
6, controller
7, database
--
20200617: index.php -> service container -> provider register - boot -> routing -> controller -> model
----
太不可思议了,
一个apiGuzzle的功能, 用到了3个类, 也就是3个方法, Laravel弄的太夸张了, 3个方法有必要放到3个文件吗?
一开始肯定整不透的, 还不如把这一个功能放到一个文件里, 还方便查看, 现在....
AcApiProvider 里面调用 ApiClientManager::getClient ,然后生成一个Guzzle对象:
$class = new \ReflectionClass($class_path);
return $class->newInstance($config['timeout'], $config['base_uri'], $cache_ins);
难道这个就是很好的技术吗?
====================================================
====================================================
====================================================
====================================================
据说Facade是为了简化写法, 好记,也有人说要废除这个特性, 据说这个特性有很好的的testability 测试性, 我不清楚, 这个是怎么说出来的理由是什么?
很多Facade 是系统写好的, 在illuminate\support\Facade下面,
从__callStatic这个方法入手,
public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();
if (! $instance) {
throw new RuntimeException('A facade root has not been set.');
}
return $instance->$method(...$args);
}
$instance 就是 这个 facade 的 getFacadeAccessor 返回的字符串在 service container里面所代表的的对象,
这里面有个 throw 提示错误, 貌似这样比较的友好么?
return $instance调用facade静态调用的方法. 完了。 那对测试有何影响?
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
====================================================
可以理解成分两步: 配置、register, 因为只有配置了才有被调用去register, 也许不配置直接在appserviceProvider里面可以直接生效。。。。
service: 具体工作的类
provider: 把这个工作的类注册到service container去 - 直接的目的就是,等到要用这个类的时候, 在任何地方都可以直接调用$this->app->make()
调用方法就完全一致了,
貌似service provider 分为3个部分
1, config/app.php/$providers
2, php artisan make:provider xxxxxxServicerProvider
猜测: 如果只需要register, 那么可以简易的register, 即在appServiceProvider下面的
public $bindings = [ ServerProvider::class => DigitalOceanServerProvider::class, ];
public $singletons = [
DowntimeNotifier::class => PingdomDowntimeNotifier::class,
ServerToolsProvider::class => ServerToolsProvider::class,
];
所有的service provider的名字放在 config/app.php里面的的$providers数组下面, 这个属于配置部分
php artisan make:provider RiakServiceProvider
provider本身也是一个类, 需要register和boot方法, 等待被调用, 然后