1. 项目有bootstrap开始启动,composer安装的package和service会自动缓存到子目录cache下面,如果部署在linux需要有读写的权限

  2. laravel核心是服务容器,基于容器实现了依赖注入,容器的实现 Illuminate\Container\Container

  3. 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];
        }
    }
  4. 门面(Facades),laravel中大量使用了门面,目的是为了使一个降低代码的耦合度,使代码更加容易调用,要自定义门面,需要继承 Illuminate\Support\Facades\Facade

  5. 契约,我理解的就是这个就是依赖注入,他和门面相似,也是为了降低耦合,但是又有不同,需要根据不同的场景选择不同的设计模式,例子如下:

    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))    {
                //
            }
        }
    }
Categories: laravelPHP

0 Comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注