<?php
interface Model{
public function run();
}
class SuperMan{
public $model;
public function __construct(Model $mode)
{
$this->model=$mode;
}
}
class XPower implements Model{
public function run(){
echo '发射X-射线';
}
}
class Container{
protected $binds;//绑定
protected $instances;//实例化
/**
* 绑定模块
* @param $abstract 模块关键字
* @param $concrete 闭包函数 或 实例
*/
public function bind($abstract,$concrete)
{
//如果是闭包函数
if($concrete instanceof Closure){
$this->binds[$abstract]=$concrete;
}else{
$this->instances[$abstract]=$concrete;
}
}
//模块实例化脚本
public function make($abstract,$parameters=[])
{
if(isset($this->instances[$abstract])){
return $this->instances[$abstract];
}
array_unshift($parameters,$this);
return call_user_func_array($this->binds[$abstract],$parameters);
}
}
$container=new Container(); //模块工厂
// 工厂初始化
$container->bind('superman', function($container, $moduleName) {
return new SuperMan($container->make($moduleName));
});
$container->bind('x-power',function($container){
return new XPower;
});
echo '<pre>';
$superman = $container->make('superman', ['x-power']);
var_dump($superman);
echo '</pre>';
Lravel 容器实践
时间: 2017-04-25
评论: 暂无评论
php关于API版本控制方案(Larvel)
时间: 2016-04-13
评论: 暂无评论
利用头信息中的 HTTP_ACCEPT 控制版本号,再通过版本号来控制命名空间。HTTP_ACCEPT 添加版本号
version=1.0
在项目文件的laravelvendorlaravelframeworksrcIlluminateRoutingRouter.php 添加方法
//定义版本号与命名空间
protected $NameSpaceMap=array(
'v1.0'=>'v1',
'v2.0'=>'v2',
'v3.0'=>'v3',
);
public function getNameSpace()
{
$str=$_SERVER['HTTP_ACCEPT'];
$str=str_replace(';','&',$str);
parse_str($str,$array);
$version=$array['version'];
if(in_array($version,$this->NameSpaceMap)){
return $this->NameSpaceMap[$version];;
}
reset($this->NameSpaceMap);
return current($this->NameSpaceMap);
}
然后路由里面定义命名空间
Route::group(['namespace'=>Route::getNameSpace()],function(){
...
});
控制层目录这样放
最后的效果(ps:懒得写控制器了,命名空间对就好)
国外laravel api 案例 https://github.com/dingo/api
laravel事务处理
时间: 2016-02-18
评论: 暂无评论
DB::transaction(function()
{
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
//在 transaction 闭包若抛出任何异常会导致事务自动回滚
或者
DB::beginTransaction();
if($user->save()){
DB::commit();//如果处理成功,通过 commit 的方法提交事务
}else{
DB::rollback();//如果处理失败,通过 rollback 的方法回滚事务
}
非常简单的Laravel安装
时间: 2016-01-22
评论: 暂无评论
安装方法是非常简单的,而且不会出错。
1.到官网下载5.0版本。
地址:http://www.golaravel.com/download/
2.解压laravel-v5.0.22.zipl得到aravel-v5.0.22,把laravel-v5.0.22 改成你的项目名字LaravelBaseDemo。
3.把项目放在本地服务器网站根目录里面。
4.设置权限(如果是windows可以跳过此步骤,mac与linux需要设置权限)。
cd LaravelBaseDemo
chmod -R 777 storage* #5.0和5.1 如果是4.X 应该是 chmod -R 777 app/storage*
composer dump-autoload #4.X必须安装composer