广州做网站一般多少钱,wordpress 3.9.2,网站页面打开速度,网页游戏下载上一篇文章写怎么单独使用illuminate/database#xff0c;这回讲下怎么整合到项目里使用。为此特意看了下laravel对其使用。本篇文章#xff0c;参照laravel的使用#xff0c;简单实现。
一 原理
laravel 里使用illuminate/config。 illuminate/config composer 地址…上一篇文章写怎么单独使用illuminate/database这回讲下怎么整合到项目里使用。为此特意看了下laravel对其使用。本篇文章参照laravel的使用简单实现。
一 原理
laravel 里使用illuminate/config。 illuminate/config composer 地址illuminate/config - Packagist illuminate/config github 地址:GitHub - illuminate/config: [READ ONLY] Subtree split of the Illuminate Config component (see laravel/framework) 根据 illuminate/config 源码显示 illuminate/config/Repository.php 仅继承Illuminate\Contracts\Config\Repository没有其他操作。
所以编写Myconfig.php相同代码没有加入 illuminate/config。也可以直接执行命令添加。
composer require illuminate/config:版本
通过查看laravel源码发现先加入容器再重写容器中绑定的对象。
之所以不能直接绑定操作后的对象因为bind()、bindIf()等相关方法中被绑定的数据不能传对象而instance()没有此限制所以能传设置参数后的对象。
数据库管理对象构造传入容器对象会自动获取config对应参数。之后可以直接查询。
例子里对于设置容器后处理配置文件的流程与laravel不同。laravel中更复杂也更完善。
二 代码
目录结构
- test.php
- config/database.php
- Myconfig.php
//test.php
require_once ./vendor/autoload.php;
require_once ./Myconfig.php;use Illuminate\Container\Container;
use Illuminate\Database\Capsule\Manager as DbManager;
use Illuminate\Events\Dispatcher;class Loader
{private $container;public function __construct(Container $container){$this-container $container;$this-makes();}private function get_makes_list(){$list [config Myconfig::class,];return $list;}private function makes(){$list $this-get_makes_list();foreach ($list as $key $value) {$this-container-bindIf($key, $value);}}public function get_path_list($name){$list [config ./config,];return $list[$name] ? $list[$name] : false;}
}class App
{private $container;private $loader;public function __construct(){$this-container new Container();$this-loader new Loader($this-container);$this-init();}public function init(){$this-init_config();$this-init_db();}private function init_config(){$config_list [];$config_path $this-loader-get_path_list(config);if ($files_list opendir($config_path)) {while (($file readdir($files_list)) ! false) {if (!preg_match(/(.*).php/, $file, $matches)) {continue;}$data include $config_path . / . $file;if (!is_array($data)) {continue;}$file_name $matches[1];foreach ($data as $key $value) {$list_key $file_name . . . $key;$config_list[$list_key] $value;}}}if (!empty($config_list)) {$myconfig new Myconfig($config_list);$this-container-instance(config, $myconfig);}}private function init_db(){$dbm new DbManager($this-container);$dbm-setEventDispatcher(new Dispatcher(new Container));$dbm-setAsGlobal(); //设置静态全局可用$dbm-bootEloquent();}
}function test()
{new App();$info DbManager::table(userinfo)-where(id, , 2)-get();var_dump($info);
}test();
//./config/database.php
return [migrations , //数据迁移//PDO文档 https://www.php.net/manual/zh/pdo.constants.phpfetch PDO::FETCH_OBJ,default master,connections [master [driver mysql,host localhost,database test,username root,password qwe110110,charset utf8,collation utf8_general_ci,prefix ,],test [driver mysql,host 127.0.0.1,database brook3_master,username root,password root,charset utf8mb4,collation utf8mb4_unicode_ci,prefix ,],],
];//./Myconfig.php
use Illuminate\Contracts\Config\Repository as ConfigContract;
use Illuminate\Support\Arr;class Myconfig implements ConfigContract, ArrayAccess
{/*** All of the configuration items.** var array*/protected $items [];/*** Create a new configuration repository.** param array $items* return void*/public function __construct(array $items []){$this-items $items;}/*** Determine if the given configuration value exists.** param string $key* return bool*/public function has($key){return Arr::has($this-items, $key);}/*** Get the specified configuration value.** param array|string $key* param mixed $default* return mixed*/public function get($key, $default null){if (is_array($key)) {return $this-getMany($key);}return Arr::get($this-items, $key, $default);}/*** Get many configuration values.** param array $keys* return array*/public function getMany($keys){$config [];foreach ($keys as $key $default) {if (is_numeric($key)) {[$key, $default] [$default, null];}$config[$key] Arr::get($this-items, $key, $default);}return $config;}/*** Set a given configuration value.** param array|string $key* param mixed $value* return void*/public function set($key, $value null){$keys is_array($key) ? $key : [$key $value];foreach ($keys as $key $value) {Arr::set($this-items, $key, $value);}}/*** Prepend a value onto an array configuration value.** param string $key* param mixed $value* return void*/public function prepend($key, $value){$array $this-get($key, []);array_unshift($array, $value);$this-set($key, $array);}/*** Push a value onto an array configuration value.** param string $key* param mixed $value* return void*/public function push($key, $value){$array $this-get($key, []);$array[] $value;$this-set($key, $array);}/*** Get all of the configuration items for the application.** return array*/public function all(){return $this-items;}/*** Determine if the given configuration option exists.** param string $key* return bool*/#[\ReturnTypeWillChange]public function offsetExists($key){return $this-has($key);}/*** Get a configuration option.** param string $key* return mixed*/#[\ReturnTypeWillChange]public function offsetGet($key){return $this-get($key);}/*** Set a configuration option.** param string $key* param mixed $value* return void*/#[\ReturnTypeWillChange]public function offsetSet($key, $value){$this-set($key, $value);}/*** Unset a configuration option.** param string $key* return void*/#[\ReturnTypeWillChange]public function offsetUnset($key){$this-set($key, null);}
}