-
项目有bootstrap开始启动,composer安装的package和service会自动缓存到子目录cache下面,如果部署在linux需要有读写的权限
-
laravel核心是服务容器,基于容器实现了依赖注入,容器的实现
Illuminate\Container\Container
-
laravel所有的服务是通过服务提供者(provider)来启动,服务提供者提供了boot 和 register方法,两者的区别在于boot是在所有的服务注册完毕以后执行的,而register是用来注册服务器,所有不要尝试在register里面调用服务,有可能他当时还没有注册成功,有时候为了性能考虑,需要做一些延迟加载服务,那么就需要服务提供者继承
\Illuminate\Contracts\Support\DeferrableProvider
接口并且实现provides方法,该方法返回一个容器绑定,实例如下:namespace App\Providers; use Riak\Connection; use Illuminate\Support\ServiceProvider; use Illuminate\Contracts\Support\DeferrableProvider; class RiakServiceProvider extends ServiceProvider implements DeferrableProvider { /** * Register the service provider. * * @return void */ public function register() { $this->app->singleton(Connection::class, function ($app) { return new Connection($app['config']['riak']); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return [Connection::class]; } }
-
门面(Facades),laravel中大量使用了门面,目的是为了使一个降低代码的耦合度,使代码更加容易调用,要自定义门面,需要继承
Illuminate\Support\Facades\Facade
-
契约,我理解的就是这个就是依赖注入,他和门面相似,也是为了降低耦合,但是又有不同,需要根据不同的场景选择不同的设计模式,例子如下:
namespace App\Orders; class Repository { /** * 缓存 */ protected $cache; /** * 创建一个新的Repository实例 * * @param \SomePackage\Cache\Memcached $cache * @return void */ public function __construct(\SomePackage\Cache\Memcached $cache) { $this->cache = $cache; } /** * 通过ID获取订单 * * @param int $id * @return Order */ public function find($id) { if ($this->cache->has($id)) { // } } }
0 Comments