diff --git a/composer.json b/composer.json index 153f2e5..889ee4c 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "blankqwq/framework", + "name": "blankphp/framework", "description": "a mvc framework", "license": "MIT", "authors": [ @@ -10,8 +10,8 @@ ], "autoload": { "psr-4": { - "Blankphp\\": "src/blankphp/", - "Helpers\\": "src/helpers/" + "BlankPhp\\": "src/blankphp/", + "BlankQwq\\Helpers\\": "src/helpers/" }, "files": [ "src/helpers/helper.php" @@ -25,7 +25,7 @@ "repositories": { "blankqwq": { "type": "path", - "url": "/home/vagrant/chart/framework" + "url": "/home/blank/project/framework" } } } diff --git a/src/blankphp/Application.php b/src/blankphp/Application.php index 415dc83..7b9ac87 100644 --- a/src/blankphp/Application.php +++ b/src/blankphp/Application.php @@ -10,8 +10,6 @@ use Blankphp\Cache\Cache; -use Blankphp\Cache\Driver\File; -use Blankphp\Cache\Driver\Redis; use Blankphp\Config\Config; use Blankphp\Config\LoadConfig; use Blankphp\Contract\CookieContract; @@ -21,6 +19,7 @@ use Blankphp\Database\Grammar\MysqlGrammar; use Blankphp\Exception\Error; use Blankphp\Exception\NotFoundClassException; +use BlankPhp\Factory\FactoryBase; use Blankphp\Kernel\ConsoleKernel; use Blankphp\Kernel\HttpKernel; use Blankphp\Log\Log; @@ -37,8 +36,10 @@ class Application extends Container { - private $version = "0.1.3-dev"; + private $version = '0.1.3-dev'; + protected $boot = false; + protected $bootstraps = [ LoadConfig::class => 'load', Error::class => 'register', @@ -71,7 +72,7 @@ public function bootstrap() public function registerDirName() { - define("PUBLIC_PATH", APP_PATH . DIRECTORY_SEPARATOR . "public/"); + define('PUBLIC_PATH', APP_PATH . DIRECTORY_SEPARATOR . 'public/'); } public function registerService() @@ -82,7 +83,7 @@ public function registerService() 'request' => [\Blankphp\Contract\Request::class, Request::class], 'route' => [\Blankphp\Contract\Route::class, Route::class], 'router' => [Router::class], - 'app' => [\Blankphp\Contract\Container::class, Application::class], + 'app' => [\Blankphp\Contract\Container::class, __CLASS__], 'db' => Database::class, 'db.grammar' => [Grammar::class, MysqlGrammar::class], 'view' => [\Blankphp\Contract\View::class, View::class], @@ -97,16 +98,18 @@ public function registerService() 'redis' => [Redis::class], 'log' => Log::class ]; - array_walk($temp, array($this, "bind")); + array_walk($temp, array($this, 'bind')); unset($temp); } public function make($abstract, $parameters = []) { - if (!$this->has($abstract)) - if (class_exists($abstract) && !empty($parameters)) - return $this->instance($abstract, new $abstract(...$parameters));; + if (!$this->has($abstract)) { + if (class_exists($abstract) && !empty($parameters)) { + return $this->instance($abstract, new $abstract(...$parameters)); + } + } return parent::make($abstract, $parameters); } @@ -122,9 +125,9 @@ public function getSignal($abstract, $name = '') { if (empty($name)) { return isset($this->signal[$abstract]) ? $this->signal[$abstract] : []; - } else { - return isset($this->signal[$abstract][$name]) ? $this->signal[$abstract][$name] : []; } + + return isset($this->signal[$abstract][$name]) ? $this->signal[$abstract][$name] : []; } public function unsetSignal($abstract) diff --git a/src/blankphp/Cache/Cache.php b/src/blankphp/Cache/Cache.php index 4d2519f..2a1f7d3 100644 --- a/src/blankphp/Cache/Cache.php +++ b/src/blankphp/Cache/Cache.php @@ -7,7 +7,7 @@ use Blankphp\Application; use Blankphp\Contract\Container; use Blankphp\Facade\Driver; -use Helpers\Str; +use BlankQwq\Helpers\Str; class Cache extends CacheAbstract { diff --git a/src/blankphp/Console/Cache/CacheConsole.php b/src/blankphp/Console/Cache/CacheConsole.php index 83c9daa..aa058e7 100644 --- a/src/blankphp/Console/Cache/CacheConsole.php +++ b/src/blankphp/Console/Cache/CacheConsole.php @@ -5,7 +5,7 @@ use Blankphp\Console\Console; -use Helpers\File; +use BlankQwq\Helpers\File; class CacheConsole extends Console { diff --git a/src/blankphp/Console/Publish/PublishConsole.php b/src/blankphp/Console/Publish/PublishConsole.php index a22766b..ef109ce 100644 --- a/src/blankphp/Console/Publish/PublishConsole.php +++ b/src/blankphp/Console/Publish/PublishConsole.php @@ -6,7 +6,7 @@ use Blankphp\Console\Console; use Blankphp\Exception\Exception; -use Helpers\Str; +use BlankQwq\Helpers\Str; class PublishConsole extends Console { diff --git a/src/blankphp/Container.php b/src/blankphp/Container.php index 7a24349..f9f1079 100644 --- a/src/blankphp/Container.php +++ b/src/blankphp/Container.php @@ -8,7 +8,6 @@ namespace Blankphp; -use Blankphp\Cache\Driver\File; use \Blankphp\Contract\Container as ContainerContract; use Blankphp\Exception\NotFoundClassException; @@ -76,7 +75,7 @@ public static function getInstance() protected function getShareObj($abstract) { - return isset($this->classes[$abstract]) ? $this->classes[$abstract] : null; + return $this->classes[$abstract] ?? null; } @@ -94,7 +93,7 @@ public function make($abstract, $parameters = []) return $this->instances[$abstract]; } - $class = $this->binds[$abstract]["concert"]; + $class = $this->binds[$abstract]['concert']; return (empty($parameters)) ? $this->instance($abstract, $this->build($class)) : $this->instance($abstract, new $class(...$parameters)); } @@ -114,7 +113,7 @@ public function has($abstract) public function bind($instance, $abstract, $share = false) { //清理老数据 - if (is_null($instance)) { + if ($instance === null) { $concert = $abstract; } else { if (is_array($instance)) { @@ -123,7 +122,7 @@ public function bind($instance, $abstract, $share = false) $concert = $instance; } } - $this->binds[$abstract] = compact("concert", "share"); + $this->binds[$abstract] = compact('concert', 'share'); $this->bindAlice(is_array($instance) ? $instance : [$instance], $abstract); } @@ -137,7 +136,7 @@ public function bindAlice(array $class, $abstract) public function getAlice($abstract) { - return isset($this->alice[$abstract]) ? $this->alice[$abstract] : null; + return $this->alice[$abstract] ?? null; } @@ -161,8 +160,9 @@ public function signal($abstract, $instance) */ public function instance($abstract, $instance, $share = false) { - if ($share) + if ($share) { $this->classes[$abstract] = $instance; + } $this->instances[$abstract] = $instance; @@ -174,17 +174,21 @@ public function instance($abstract, $instance, $share = false) public function notInstantiable($concrete) { - throw new \Exception("[$concrete] no Instanctiable", 3); + throw new \RuntimeException("[$concrete] no Instantiable", 3); } public function build($concrete) { - $reflector = new \ReflectionClass($concrete); + try { + $reflector = new \ReflectionClass($concrete); + } catch (\ReflectionException $e) { + throw new \RuntimeException("reflection [$concrete] error"); + } if (!$reflector->isInstantiable()) { return $this->notInstantiable($concrete); } $constructor = $reflector->getConstructor(); - if (is_null($constructor)) { + if ($constructor === null) { return new $concrete; } if ($reflector->isInstantiable()) { @@ -203,7 +207,7 @@ public function build($concrete) * @return array * 解决依赖注入问题 */ - public function resolveDepends($params = []) + public function resolveDepends($params = []):array { // 判断参数类型 foreach ($params as $key => $param) { @@ -221,7 +225,7 @@ public function resolveDepends($params = []) $paramArr[] = $args; } } - return $paramArr; + return $paramArr ?? []; } @@ -240,7 +244,7 @@ public function call($instance, $method = null, $construct = null, array $param } else { $instance = $this->build($instance); } - if (is_null($method)) { + if ($method === null) { $this->instance($abstract, $instance, true); unset($abstract); return $instance; @@ -249,7 +253,7 @@ public function call($instance, $method = null, $construct = null, array $param } - public function flush() + public function flush():void { $this->classes = []; $this->alice = []; @@ -263,8 +267,9 @@ public function flush() */ public function offsetExists($offset) { - if ($this->has($offset)) + if ($this->has($offset)) { return true; + } return false; } @@ -282,7 +287,7 @@ public function offsetGet($offset) * * @param offset * * @param value * */ - public function offsetSet($offset, $value) + public function offsetSet($offset, $value):void { $this->classes[$offset] = $value; } @@ -290,12 +295,12 @@ public function offsetSet($offset, $value) /** * @param mixed $offset */ - public function offsetUnset($offset) + public function offsetUnset($offset):void { unset($this->binds[$offset], $this->instances[$offset]); } - public function alice($name, $class) + public function alice($name, $class):bool { return class_alias($class, $name); } diff --git a/src/blankphp/Provider/Contract/ProviderContract.php b/src/blankphp/Contract/ProviderContract.php similarity index 86% rename from src/blankphp/Provider/Contract/ProviderContract.php rename to src/blankphp/Contract/ProviderContract.php index fd8d332..62337aa 100644 --- a/src/blankphp/Provider/Contract/ProviderContract.php +++ b/src/blankphp/Contract/ProviderContract.php @@ -6,7 +6,7 @@ * Time: 10:12 */ -namespace Blankphp\Provider\Contract; +namespace Blankphp\Contract; use Blankphp\Application; diff --git a/src/blankphp/Database/Database.php b/src/blankphp/Database/Database.php index 32156d8..20f7833 100644 --- a/src/blankphp/Database/Database.php +++ b/src/blankphp/Database/Database.php @@ -16,7 +16,7 @@ use Blankphp\Database\Traits\DBJoin; use Blankphp\Exception\DataBaseTypeException; use Blankphp\Facade\Log; -use Helpers\Str; +use BlankQwq\Helpers\Str; class Database { @@ -245,9 +245,9 @@ public function __call($name, $arguments) } //将数据进行绑定,,Connect? - public function bindValues(array $values = []) + public function bindValues(array $values = []): void { - if (is_null($this->PDOsmt)) { + if ($this->PDOsmt === null) { throw new DataBaseTypeException('异常错误'); } $i = 0; @@ -269,7 +269,7 @@ public function bindValues(array $values = []) public function bindCall(array $values) { - if (is_null($this->PDOsmt)) { + if ($this->PDOsmt === null) { throw new Exception('异常错误'); } foreach ($values as $key => $value) { diff --git a/src/blankphp/Driver/DataBaseDriver.php b/src/blankphp/Driver/DataBaseDriver.php index 355e562..7dd32f9 100644 --- a/src/blankphp/Driver/DataBaseDriver.php +++ b/src/blankphp/Driver/DataBaseDriver.php @@ -34,7 +34,7 @@ public function __construct($name = "default", $option = []) //后续操作 } - public function clearExpireData($max_time) + public function clearExpireData() { } diff --git a/src/blankphp/Driver/Driver.php b/src/blankphp/Driver/Driver.php index 2f33603..3489631 100644 --- a/src/blankphp/Driver/Driver.php +++ b/src/blankphp/Driver/Driver.php @@ -11,7 +11,9 @@ abstract class Driver implements DriverContract, \SessionHandlerInterface { use SessionHandlerTrait, OtherHelpTrait; - abstract public function __construct($name = "default", $option = []); + public function __construct($name = 'default', $option = []){ + + } public function parseValue($value) { @@ -23,7 +25,7 @@ public function valueParse($value) return unserialize($value); } - public function clearExpireData($maxlifetime) + public function clearExpireData($max_live_time) { return true; } diff --git a/src/blankphp/Driver/DriverFactory.php b/src/blankphp/Driver/DriverFactory.php new file mode 100644 index 0000000..f821a52 --- /dev/null +++ b/src/blankphp/Driver/DriverFactory.php @@ -0,0 +1,14 @@ + FileDriver::class, - "driver.redis" => RedisDriver::class, - "driver.database" => DataBaseDriver::class, + 'driver.file' => FileDriver::class, + 'driver.redis' => RedisDriver::class, + 'driver.database' => DataBaseDriver::class, 'driver.memcache' => MemeCacheDriver::class, - 'driver.manager' => DriverManager::class, + 'driver.factory' => DriverFactory::class, ]; + public function boot() { $config = $this->app->make('config')->get('driver'); - $driver = new DriverManager($config, $this->registers); - $this->app->instance("driver.manager", $driver); + $driver = new DriverFactory($config, $this->registers); + $this->app->instance('driver.factory', $driver); } public function register() { - foreach ($this->registers as $k => $item) { $this->app->bind($item, $k); } diff --git a/src/blankphp/Driver/FileDriver.php b/src/blankphp/Driver/FileDriver.php index 159a757..b9ca5bb 100644 --- a/src/blankphp/Driver/FileDriver.php +++ b/src/blankphp/Driver/FileDriver.php @@ -57,7 +57,7 @@ public function build($key) public function set($key, $value, $ttl = null) { $value = ["value" => $value, "ttl" => time() + $ttl]; - \Helpers\File::put($this->build($key), $value); + \BlankQwq\Helpers\File::put($this->build($key), $value); } public function remember($key, \Closure $closure, $ttl = null) diff --git a/src/blankphp/Driver/MemeCacheDriver.php b/src/blankphp/Driver/MemeCacheDriver.php index 47a0424..e0806bb 100644 --- a/src/blankphp/Driver/MemeCacheDriver.php +++ b/src/blankphp/Driver/MemeCacheDriver.php @@ -11,4 +11,43 @@ class MemeCacheDriver extends Driver { + public function __construct($name = 'default', $option = []) + { + parent::__construct($name, $option); + } + + public function set($key, $value, $ttl = null) + { + // TODO: Implement set() method. + } + + public function delete($key) + { + // TODO: Implement delete() method. + } + + public function get($key, $default = '') + { + // TODO: Implement get() method. + } + + public function remember($array, \Closure $closure, $ttl = 0) + { + // TODO: Implement remember() method. + } + + public function has($key) + { + // TODO: Implement has() method. + } + + public function flush() + { + // TODO: Implement flush() method. + } + + public function forget($key) + { + // TODO: Implement forget() method. + } } \ No newline at end of file diff --git a/src/blankphp/Driver/RedisDriver.php b/src/blankphp/Driver/RedisDriver.php index f7ad41a..6a21e10 100644 --- a/src/blankphp/Driver/RedisDriver.php +++ b/src/blankphp/Driver/RedisDriver.php @@ -33,7 +33,7 @@ public function __construct($name = "default", $option = []) public function set($key, $value, $ttl = null) { - if (!is_null($ttl)) { + if ($ttl !== null) { return $this->redis->set($key, $this->parseValue($value), 'EX', $ttl); } else { return $this->redis->set($key, $this->parseValue($value)); @@ -49,7 +49,7 @@ public function delete($key) public function get($key, $default = '') { $value = $this->redis->get($key); - return !is_null($value) ? $this->valueParse($value) : $default; + return $value !== null ? $this->valueParse($value) : $default; } public function remember($array, \Closure $closure, $ttl = 0) @@ -70,7 +70,6 @@ public function has($key) public function flush() { - // TODO: Implement flush() method. return $this->redis->flushdb(); } @@ -82,6 +81,4 @@ public function forget($key) } - - } \ No newline at end of file diff --git a/src/blankphp/Driver/Traits/SessionHandlerTrait.php b/src/blankphp/Driver/Traits/SessionHandlerTrait.php index 1a5b1ec..368ab8c 100644 --- a/src/blankphp/Driver/Traits/SessionHandlerTrait.php +++ b/src/blankphp/Driver/Traits/SessionHandlerTrait.php @@ -20,7 +20,7 @@ public function destroy($session_id) public function gc($maxlifetime) { - return $this->clearExpireData($maxlifetime); + return $this->clearExpireData(); } public function open($save_path, $name) diff --git a/src/blankphp/Event/EventAbstract.php b/src/blankphp/Event/EventAbstract.php index 1ab9854..d67dec1 100644 --- a/src/blankphp/Event/EventAbstract.php +++ b/src/blankphp/Event/EventAbstract.php @@ -12,18 +12,21 @@ abstract class EventAbstract { private $status; - public static $observes ; + public static $observes; - public static function observe(Observer $observer) + public static function observe(Observer $observer): void { //根据信号进行指定更新 self::$observes = $observer; } - public function deobserve($name) + + /* + * 解除绑定 + */ + public function deobserve($name): void { //解除绑定关系 - self::$observes=''; -// unset([$name]); + unset(self::$observes[$name]); } public function getStatus() @@ -31,19 +34,20 @@ public function getStatus() return $this->status; } - public function setStatus($status) + public function setStatus($status): void { $this->status = $status; } //将状态推行到每一个观察者 - public function notify(){ - if (isset($this->observes)){ + public function notify(): void + { + if (isset($this->observes)) { self::$observes->{$this->status}($this); } } - public function event($event) + public function event($event): void { $this->setStatus($event); $this->notify(); diff --git a/src/blankphp/Event/ObserveAbstract.php b/src/blankphp/Event/ObserveAbstract.php index cab214a..cfba03a 100644 --- a/src/blankphp/Event/ObserveAbstract.php +++ b/src/blankphp/Event/ObserveAbstract.php @@ -12,6 +12,6 @@ abstract class ObserveAbstract { // - public abstract function doListen(); + abstract public function doListen(); } \ No newline at end of file diff --git a/src/blankphp/Exception/DataBase/DataBaseTypeException.php b/src/blankphp/Exception/DataBaseTypeException.php similarity index 100% rename from src/blankphp/Exception/DataBase/DataBaseTypeException.php rename to src/blankphp/Exception/DataBaseTypeException.php diff --git a/src/blankphp/Exception/Method/NotFoundMethodException.php b/src/blankphp/Exception/Method/NotFoundMethodException.php index 413c1da..22ff6e7 100644 --- a/src/blankphp/Exception/Method/NotFoundMethodException.php +++ b/src/blankphp/Exception/Method/NotFoundMethodException.php @@ -1,9 +1,11 @@ make($className); static::$resolveFacadeInstances[static::getFacadeAccessor()] = $obj; return $obj; @@ -42,7 +44,7 @@ public static function resolveFacadeInstance() public static function __CallStatic($method, $args) { - $obj = static::resolveFacadeInstance();; + $obj = static::resolveFacadeInstance(); //通过反射解决依赖 return $obj->$method(...$args); } diff --git a/src/blankphp/Facade/Cache.php b/src/blankphp/Facade/Cache.php index 73e4ad2..28c5ca0 100644 --- a/src/blankphp/Facade/Cache.php +++ b/src/blankphp/Facade/Cache.php @@ -1,15 +1,15 @@ -setDrivers($drivers); + $this->setDrivers($project); $this->setConfig($config); } - public function factory($name, $nickName = "default", $register = false) + /** + * @param array $config + */ + public function setConfig($config): void + { + $this->config = $config; + } + + /** + * @param $name + * @param string $nickName + * @param bool $register + * @return mixed + * 生产driver + */ + public function factory($name, $nickName = 'default', $register = false) { //获取适配器 $realName = $name; - - list($name, $config) = $this->parseName($name); + //解析名称 + [$name, $config] = $this->parseName($name); //如果app中有,那么直接返回app中的 if (isset($this->instance[$realName]) && !empty($res = $this->instance[$realName])) { return $res; @@ -36,39 +52,57 @@ public function factory($name, $nickName = "default", $register = false) $className = $this->getDrivers($name); //获取配置 $classConfig = $this->getConfig($config); + //创造driver,并存储再返回 if ($register) { return $this->instance[$realName] = new $className($nickName, $classConfig); - } else { - return new $className($nickName, $classConfig); } + + return new $className($nickName, $classConfig); } //解析名称,并且返回key和config的索引 - public function parseName($name) + public function parseName($name): array { $names = explode('.', $name); if (count($names)> 1) { - $name = Str::merge("driver.", $names[0]); + $name = Str::merge('driver.', $names[0]); $config = $names; } else { - $config = [$name, "default"]; + $config = [$name, 'default']; } return array($name, $config); } /** - * @param string $key + * @param $key + * @return array + */ + public function getDrivers($key): array + { + return $this->project[$key]; + } + + /** + * @param array $project + */ + public function setDrivers($project): void + { + $this->project = $project; + } + + /** + * @param array|string $key * @param string $default * @return mixed */ - public function getConfig($key, $default = "") + public function getConfig($key, $default = '') { if (is_array($key)) { $value = $this->config; - foreach ($key as $key) { - if (isset($value[$key])) { - $value = $value[$key]; + foreach ($key as $k) { + if (isset($value[$k])) { + $value = $value[$k]; } else { $value = []; break; @@ -76,32 +110,7 @@ public function getConfig($key, $default = "") } return $value; } - return isset($this->config[$key]) ? $this->config[$key] : $default; - } - - /** - * @param array $config - */ - public function setConfig($config) - { - $this->config = $config; + return $this->config[$key] ?? $default; } - /** - * @return array - */ - public function getDrivers($key) - { - return $this->drivers[$key]; - } - - /** - * @param array $drivers - */ - public function setDrivers($drivers) - { - $this->drivers = $drivers; - } - - } \ No newline at end of file diff --git a/src/blankphp/Factory/Make.php b/src/blankphp/Factory/Make.php index 151325a..85a4de4 100644 --- a/src/blankphp/Factory/Make.php +++ b/src/blankphp/Factory/Make.php @@ -1,10 +1,10 @@ - MakeConsole::class, 'cache' => CacheConsole::class, 'publish' => PublishConsole::class ]; + protected $args = []; protected $config = []; diff --git a/src/blankphp/Manager/ManagerBase.php b/src/blankphp/Manager/ManagerBase.php new file mode 100644 index 0000000..ac44fa6 --- /dev/null +++ b/src/blankphp/Manager/ManagerBase.php @@ -0,0 +1,14 @@ +app = Application::getInstance(); - $this->boot(); - $this->register(); + if (method_exists($this, 'boot')) { + $this->boot(); + } + if (method_exists($this, 'register')) { + $this->register(); + } } + /** + * @return void + */ public function boot() { - // TODO: Implement boot() method. + } + /** + * @return void + */ public function register() { - // TODO: Implement register() method. + } } \ No newline at end of file diff --git a/src/blankphp/Route/Route.php b/src/blankphp/Route/Route.php index 0311415..90d87e6 100644 --- a/src/blankphp/Route/Route.php +++ b/src/blankphp/Route/Route.php @@ -17,7 +17,7 @@ use Blankphp\Route\Exception\RouteErrorException; use Blankphp\Route\Traits\SetMiddleWare; use Blankphp\Route\Traits\ResolveSomeDepends; -use Helpers\Str; +use BlankQwq\Helpers\Str; //后期应该使用迭代器模式来进行优化 class Route implements Contract diff --git a/src/blankphp/Session/Session.php b/src/blankphp/Session/Session.php index 971c55d..17705c2 100644 --- a/src/blankphp/Session/Session.php +++ b/src/blankphp/Session/Session.php @@ -13,7 +13,7 @@ use Blankphp\Contract\Session as SessionContract; use Blankphp\Facade\Cookie; use Blankphp\Facade\Driver; -use Helpers\Str; +use BlankQwq\Helpers\Str; class Session implements SessionContract { diff --git a/src/blankphp/Validate/Validate.php b/src/blankphp/Validate/ValidateBase.php similarity index 93% rename from src/blankphp/Validate/Validate.php rename to src/blankphp/Validate/ValidateBase.php index aee0d65..c6e7d46 100644 --- a/src/blankphp/Validate/Validate.php +++ b/src/blankphp/Validate/ValidateBase.php @@ -4,7 +4,7 @@ namespace Blankphp\Validate; -class Validate +class ValidateBase { protected $validataRule = []; public static $rule=[ diff --git a/src/blankphp/Validate/ValidateRequest.php b/src/blankphp/Validate/ValidateRequest.php index 5488aac..8430d03 100644 --- a/src/blankphp/Validate/ValidateRequest.php +++ b/src/blankphp/Validate/ValidateRequest.php @@ -4,7 +4,7 @@ namespace Blankphp\Validate; -class Request +class ValidateRequest { } \ No newline at end of file diff --git a/src/blankphp/View/Type/Parse.php b/src/blankphp/View/Type/Parse.php index 0da93bc..f638bd1 100644 --- a/src/blankphp/View/Type/Parse.php +++ b/src/blankphp/View/Type/Parse.php @@ -1,10 +1,10 @@ -make(\Blankphp\Contract\Kernel::class)->bootstrap(); - $app['route']->get('/',function (){ - return " -
BlankPhp V1
每日练习,刻意精进
- 为phpWeb开发设计的高性能框架
-
BlankPhp V1
每日练习,刻意精进
- 为phpWeb开发设计的高性能框架
-
BlankPhp V1
每日练习,刻意精进
+ 为phpWeb开发设计的高性能框架
+
BlankPhp V1
每日练习,刻意精进
+ 为phpWeb开发设计的高性能框架
+