Lravel 容器实践

作者: 时间: 2017-04-25 评论: 暂无评论
<?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>';

php关于API版本控制方案(Larvel)

作者: 时间: 2016-04-13 评论: 暂无评论

利用头信息中的 HTTP_ACCEPT 控制版本号,再通过版本号来控制命名空间。HTTP_ACCEPT 添加版本号

version=1.0

在项目文件的\laravel\vendor\laravel\framework\src\Illuminate\Routing\Router.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(){
   ...
});

控制层目录这样放
搜狗截图20160413174700.png

最后的效果(ps:懒得写控制器了,命名空间对就好)
2.png

国外laravel api 案例 https://github.com/dingo/api

php 字符转实体

作者: 时间: 2016-03-31 评论: 暂无评论
 <?php 
    echo html_entity_decode(str);//字符转实体  
 ?>

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 评论: 暂无评论

安装方法是非常简单的,而且不会出错。
屏幕快照 2016-01-22 上午12.32.09.png
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

5.直接访问 http://127.0.0.1/LaravelBaseDemo/public/