[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 ...
随机推荐
- BZOJ 4034 [HAOI2015]树上操作(树链剖分)
题目链接 BZOJ4034 这道题树链剖分其实就可以了. 单点更新没问题. 相当于更新 [f[x], f[x]]这个区间. f[x]表示树链剖分之后每个点的新的标号. 区间更新的话类似DFS序,求出 ...
- Linux下运行Java项目时,出现No X11 DISPLAY variable was set, but this program performed an operation which requires it.的问题解决
在~/.bashrc环境变量文件最下方加入: export DISPLAY=:0.0 然后,刷新环境变量以使其生效: source -/.bashrc 参考:http://stackoverflow. ...
- 【J2EE】十三个规范:愿天下苍生,人人如猿。
学习了J2ee后对java这个立足标准化的行为感到深深的佩服. 收买什么都不如收买人心,培养啥子都不如培养 习惯.没错,java就是在培养行业习惯,以一纸规范屹立不倒.毕竟技术什么的层出不穷,再新再前 ...
- docker 搭建linux samba
https://hub.docker.com/r/jenserat/samba-publicshare/ 需要共享目录 只需直接 挂载容器映射即可
- HashTable源代码剖析
<span style="font-size:14px;font-weight: normal;">public class Hashtable<K,V> ...
- PostgreSQL源码解读 基础结构 node
一.node节点的定义 源代码路径postgresql-9.2.3/src/include/nodes/nodes.h 在查询解析SQL的查询部分,要用到大量的结构体,许多函数处理的逻辑类似,就是传入 ...
- openwrt: patch-dtb
dts的概念是linux kernel中的,跟openwrt的关系不大.只是恰好在学习openwrt的时候碰到了这个东西,所以记录在openwrt名下. patch-dtb openwrt对arch/ ...
- HDU 5188 背包
有N道题.要求得到最少W分 给出N道题的:每道题用时T.分数V,应在且必须在L时刻提交才干得分 问得到W分所用的最少的时间 以L-T排序,然后做01背包就可以 #include "stdio ...
- 三种方法打印 main函数的返回地址的值(old EIP)(用途,你懂得!)
这里能够简单的改动随意函数的返回地址.能够做到自己定义EIP的指向,就可以运行当前进程空间的随意指令,这里仅仅是让大家更清楚栈帧结构,没有涉及跨进程的inline HOOK 等,后面会陆续讲下读取随意 ...
- hadoop eclipse插件生成
hadoop eclipse插件生成 做了一年的hadoop开发.还没有自动生成过eclipse插件,一直都是在网上下载别人的用,今天有时间,就把这段遗憾补回来,自己生成一下,废话不说,開始了. 本文 ...