[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——1611: [Usaco2008 Feb]Meteor Shower流星雨
http://www.lydsy.com/JudgeOnline/problem.php?id=1611 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1 ...
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论. MyBatis将数据缓存设计成两级结构,分为一级缓存 ...
- 【面试 hibernate】【第二篇】hibernate相关问题
1.hibernate工作原理[说一下你怎么理解的hibernate] hibernate是一个ORM对象关系映射的持久层框架,是对JDBC的轻量级封装. [可以不记,hibernate核心接口] 1 ...
- Linux索引节点(Inode:no space for device)用满导致的一次故障
问题描写叙述 在storm測试环境集群上上nimbus和supervisor自己主动挂调.重新启动时显示no space for device,也不能创建,加入文件及文件夹,df -h查看 ilesy ...
- [转] 一句shell命令搞定代码行数统计
今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计. 想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加 ...
- python 工具 FFT变换
import numpy as npimport pylabwave_data =np.fromfile("C:\\Users\\Administrator\\Desktop\\bins\\ ...
- linux shell操作
---------------------------------------------------- 原文:http://unix.stackexchange.com/questions/2863 ...
- docker下用keepalived+Haproxy实现高可用负载均衡集群
启动keepalived后宿主机无法ping通用keepalived,报错: [root@localhost ~]# ping 172.18.0.15 PING () bytes of data. F ...
- Our happy ending
题目链接 题意: 输入n.k.L,n个数,最大值不超过L,在序列中取若干个数和能达到k的序列个数 n,k<=20 , 0<=L<=10^9 分析: 题目关键在于和k比較小,所以能够考 ...
- 编资源bundle时图片文件变成tiff的解决方法
一般,编写SDK的时候,如果SDK还带了一些资源文件,那么最理想的是将资源文件也打包成为bundle给应用方一起使用.而在编资源bundle时,有时会发现编译好后的图片文件从png转成了tiff,这样 ...