[laravel]要点
1. routing
2. Ioc
3. Facade
4. Artisan
1.routing
参考:http://laravel.com/docs/4.2/routing
了解routing之前先了解下laravel的处理过程request lifecycle
发送给应用程序的所有请求都经由 public/index.php 脚本处理。如果使用的是 Apache 服务器,Laravel中包含的 .htaccess 文件将对所有请求进行处理并传递给 index.php。这是Laravel从接受客户端请求到返回响应给客户端的整个过程的开始。若能对于Laravel的引导过程(bootstrap process)有一个大致的认识,将有助于理解框架,我们不妨先讨论这个。
到目前为止,学习Laravel引导过程所需掌握的最重要的概念就是 服务提供器。打开app/config/app.php 配置文件,找到 providers 数组,你会发现一个服务提供器的列表。这些提供器充当了Laravel的主要引导机制。在我们深入服务提供器之前,先回到 index.php的讨论。当一个请求进入 index.php 文件,bootstrap/start.php 文件会被加载。这个文件会创建一个 Laravel Application 对象,该对象同时作为框架的 IoC 容器。
Application 对象创建完成后,框架会设置一些路径信息并运行 环境检测 。然后会执行位于Laravel源码内部的引导脚本,并根据你的配置文件设置时区、错误报告等其他信息。除了配置这些琐碎的配置选项以外,该脚本还会做一件非常重要的事情:注册所有为应用程序配置的服务提供器。
在注册完所有服务提供器后,app/start 下的文件会被加载。最后,app/routes.php 文件会被加载。一旦 routes.php 文件被加载,Request 对象就被发送给应用程序对象,继而被派发到某个路由上。
我们总结一下:
- 请求进入
public/index.php文件。 bootstrap/start.php文件创建应用程序对象并检测环境。- 内部的
framework/start.php文件配置相关设置并加载服务提供器。 - 加载应用程序
app/start目录下的文件。 - 加载应用程序的
app/routes.php文件。 - 将 Request 对象发送给应用程序对象,应用程序对象返回一个 Response 对象。
- 将 Response 对象发回客户端。
2.Ioc
参考:http://eddmann.com/posts/how-static-facades-and-ioc-are-used-in-laravel/
http://www.golaravel.com/laravel/docs/4.2/ioc/
在应用程序中我们要使用多种组件在很多地方,如果每次使用都去实例化创建无疑很浪费资源。那我们选择以一种全局注册的方式来获取实例而不是使用一次创建一次节省了很大的开销,那么要使用这些组件去实例化类:
以下参考http://www.yuansir-web.com/2014/03/20/理解php-依赖注入laravel-ioc容器/
$connection = new Connection();
$session = new Session(); //Pass them as constructor parameters
$some = new SomeComponent($connection, $session); // ... or using setters
$some->setConnection($connection);
$some->setSession($session);
我们不得不在应用程序的许多地方创建这个对象。如果你不需要依赖的组件后,我们又要去代码注入部分移除构造函数中的参数或者是setter方法
class SomeComponent
{ protected $_di; public function __construct($di)
{
$this->_di = $di;
} public function someDbTask()
{ // Get the connection service
// Always returns a new connection
$connection = $this->_di->get('db'); } public function someOtherDbTask()
{ // Get a shared connection service,
// this will return the same connection everytime
$connection = $this->_di->getShared('db'); $filter = $this->_db->get('session'); } } $di = new Phalcon\DI(); //Register a "db" service in the container
$di->set('db', function(){
return new Connection(array(
"host" => "localhost",
"username" => "root",
"password" => "secret",
"dbname" => "invo"
));
});//Register a "session" service in the container
$di->set('session', function(){
return new Session();
}); //Pass the service container as unique parameter
$some = new SomeComponent($di); $some->someTask();
现在,该组件只有访问某种service的时候才需要它,如果它不需要,它甚至不初始化,以节约资源。该组件是高度解耦。他们的行为,或者说他们的任何其他方面都不会影响到组件本身
------引用分割------
Laravel中使用App做为容器,将组件绑定到容器中有
bind 当执行 App::make 方法,闭包函数被执行并返回结果。
singleton 将绑定到容器的类型处理一次,然后接下来从容器中取得的都应该是相同实例,将被缓存,调用时候调用共享内存
instance 将一个已经存在的对象接口绑定到容器中
参看container源码:

3.Facades
Facade(外观模式)提供了一个"static"(静态)接口去访问注册到IoC 容器中的类
class Cache extends Facade {
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'cache'; }
}
Cache类继承Facade这个基类,并且定义了个getFacadeAccessor()方法。注意,该方法的工作是返回绑定到IoC的名字。
当用户引用任何在Cache facade 中的静态方法, Laravel 从 IoC 容器绑定中取得 cache,并且执行请求的对象方法(在该例子中为get)
4.Artisan
参考:http://www.golaravel.com/laravel/docs/4.2/commands/
[laravel]要点的更多相关文章
- Laravel --- 要点笔记
一.路由: // 常规用法 Route::get('/',function(){ return 'get'; }) // 匹配多个 Route::match(['get','post'],'/',fu ...
- [php]laravel框架容器管理的一些要点
本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...
- laravel框架容器管理的一些要点
本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...
- laravel框架容器管理的一些要点(转)
本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...
- Laravel 使用 seeder 使用要点
一.关于 DB use DB; 再使用 DB::table(database.table)->get(); 二.关于 ERROR 1366 (HY000): Incorrect string v ...
- laravel 服务提供者
服务提供者,在laravel里面,其实就是一个工厂类.它最大的作用就是用来进行服务绑定.当我们需要绑定一个或多个服务的时候,可以自定义一个服务提供者,然后把服务绑定的逻辑都放在该类的实现中.在lara ...
- laravel框架容器管理
来自http://www.cnblogs.com/chy1000/p/7072936.html 本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章 ...
- Laravel Tinker 使用笔记
我们知道,Laravel Tinker 提供了命令行式的交互调试途径.使用极其方便直观. 使用: #php artisan tinker 要点: 命令要在一行上输入完成,回车执行.>>&g ...
- 仿联想商城laravel实战---2、后端页面搭建(验证码如何在页面中使用)
仿联想商城laravel实战---2.后端页面搭建(验证码如何在页面中使用) 一.总结 一句话总结: 放在img里面,img的src就是生产验证码的控制器路径: img src="/admi ...
随机推荐
- 关于Properties 集 添加数据 遍历数据
public static void fun1(){ Properties v = new Properties(); v.setProperty("a","1" ...
- ArcCatalog中通过ArcSDE向Oracle数据库中导入数据
将数据导入到Oracle指定的表空间的具体内容如下: 首先,在ArcCatalog中建立指定表空间的数据库连接(要以指定表空间的用户登录): 然后,在ArcCatlog中定位到数据源,选中并拷贝图层; ...
- Mqtt协议IOS端移植3
ServerMqFramework.h #import "MqttFramework.h" @interface ServerMqFramework : MqttFramework ...
- 【iOS】系统框架学习
iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...
- 【C语言天天练(九)】动态内存分配
引言:数组的元素存储于内存中连续的位置上.当一个数组被声明时.它所须要的内存在编译时就被分配. 可是,我们能够使用动态内存分配在执行时为它分配内存. 一块内存的生命周期能够分为四个阶段:分配.初始化. ...
- C++再论单例模式
#include <iostream> #include <windows.h> #include <mutex> std::mutex gmutex; using ...
- npm 的常用操作
cd 项目目录 npm install -y 初始化信息,-y表示所有的选择都表示确定 执行完之后会自动生成一个package.json文件 添加依赖: npm -i(install) jquery ...
- JSP与HTML的差别
HTML(Hypertext Markup Language)文本标记语言,它是静态页面,和JavaScript一样解释性语言,为什么说是解释性 语言呢?由于.仅仅要你有一个浏览器那么它就能够正常显示 ...
- Mysql性能优化笔记
一,索引 1.Innodb索引使用的是B+树 2.尽量简化where条件,比如不要出现 where id + 3 = 5,这无法使用索引 3.索引很大时,可以冗余一列来模拟哈希索引 4.小的表不需要使 ...
- monggodb 复制集 集群 搭建
https://docs.mongodb.com/manual/tutorial/enable-authentication/ Overview Enabling access control on ...