zoukankan      html  css  js  c++  java
  • laravel重要概念和知识点

      Service Provider:

    一个laravel service provider就是一个注册IoC container binding的类。实际上,laravel本身就自包含了一堆管理核心框架组件的container binding的service provider. 一个service provider必须具有至少一个方法: register. 该方法就是执行该service provider绑定其暴露给laravel ioc container的类库的函数。当一个请求进入到application,而框架本身booting up时,那么所有在app.php中定义的service provider的register函数将被调用。这个过程在applicaiton的life cycle很早就发生了,因此当你bootup你自己的文件时,这些laravel service就已经可用了,比如所有在start目录中定义的自己的代码。

    注意:永远不要在register方法中使用laravel的services,因为这个函数只用来绑定objects到ioc container.所有解析和调用相关bounded class的工作必须在service provider的boot函数中调用。(在所有的service providers被成功注册后,这些组件就进入booted状态,这时将会调用每个service provider的boot函数。通常boot函数可以做任何你想做的事情,比如register event listener,包含一个route file,register filter等等)

    注意:并不是所有第三方的pacakges都需要一个service provider.事实上,甚至不需要service provider来保证第三方组件正常工作,原因是service provider本身只完成bootstrap component的功能(注册给ioc container)。不过service provider确实提供了一个组织第三方component的bootstrap代码及binding ioc的一个方便的地方,值得使用!

    为了提高laravel的性能,laravel本身提供了deferred service provider的概念。比如QueueServiceProvider只有在确实需要queue时才初始化,而在一般的request中并不需要。这个机制通过如下方法实现: app/storage/meta目录保存了所谓service manifest列表,该列表列出所有的ioc binding name和其serivce provider对应关系。这样,当application请求container要求queue container binding时,laravel就知道它需要初始化queue对象,因此执行QueueServiceProvider来实例化。这样就允许了laravel实现lazy-load service provider for each request,大大提高了性能。

     separate concerns

    一个好的设计可能有一下就能实现:separating responsibilities, creating layers of responsibility.  controllers are responsible for receiving an HTTP request and calling the proper business layer classes.你的business/domain layer才是你的应用。她包含retrieve data, validate data, process payments, send e-mail andother functionality。

    事实上,你的domain layer根本无需知道“the web”! The web is simply a transport mechanism to access your application, and knowledge of the web and HTTP need not go beyond the routing and controller layers.

    Classname::class解释

    namespace MyProject;
    class Alpha{ }
    
    namespace MyOtherProject;
    class Beta{ }
    
    echo Alpha::class; // displays: MyProjectAlpha
    echo Beta::class; // displays: MyOtherProjectBeta

    自从PHP5.5,class关键字也被用来作为class name resolution.你可以通过使用ClassName::class来获取一个包含fully qualified name.这个功能对于namespaced class非常有用!!

  • 相关阅读:
    mysq 日期相减
    说说时间观与时间管理——北漂18年(71)
    ionic之切换开关
    ionic之单选框
    SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
    14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
    14.5.2.2 autocommit, Commit, and Rollback
    14.5.2 事务隔离级别
    对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
    mysql explain 解释
  • 原文地址:https://www.cnblogs.com/kidsitcn/p/4578921.html
Copyright © 2011-2022 走看看