1.把bootstrap文件夹下app.php挪到根目录下,并更名bootstrap.php
2.把public下index.php文件挪到根目录下 叫 index.php
3.修改bootstrap.php
A.增加环境header头环境变量
B.把文件.env 这些代码去掉
define('ENVIRONMENT', isset($_SERVER['HTTP_QBENV']) ? $_SERVER['HTTP_QBENV'] : 'production');
$loader = require_once __DIR__ . '/vendor/autoload.php';
$app = new QB\Core\Application(realpath(__DIR__), $loader);
return $app;
意义:拿到$loader 类,并传递给 Application() 类
4.在app目录下新建Core目录,存放需要扩展的公共代码
重写 Laravel\Lumen\Application
namespace QB\Core;
use Laravel\Lumen\Application as LumenApplication;
class Application extends LumenApplication {
}
需要注意:
定义了一个命名空间 QB\Core 这个命名空间需要在composer.json 中定义,看代码
这是compser.json 中一个片断
"autoload": {
"psr-4": {
"App\\": "app/",
"QB\\Core\\": "app/Core/",
"App\\Libraries\\":"app/Libraries/"
},
"files": [
"app/Core/Common.php",
"app/Libraries/Functions/Funs.php"
]
},
我们可以看到 "QB\\Core\\": "app/Core/", 这个QB\Core 指向了 app/Core 目录
好的,有了这个命名空间后,需要进行一下 composer update 更新。
有了以上的步骤,重写 Core\Application :
//重写数据库路径
public function databasePath($path = '') {
return $this->basePath . DIRECTORY_SEPARATOR . 'database' . ($path ? DIRECTORY_SEPARATOR . $path : $path);
}
//修改目录保存位置
public function storagePath($path = '') {
return $this->basePath . DIRECTORY_SEPARATOR . 'data' . ($path ? DIRECTORY_SEPARATOR . $path : $path);
}
//资源目录文件
public function resourcePath($path = '') {
return $this->basePath . DIRECTORY_SEPARATOR . 'static' . ($path ? DIRECTORY_SEPARATOR . $path : $path);
}
/**
* 语言包存放路径
* @dec $this->basePath('language') 这返回的是 /language 和index.php 在同一个目录下的language
* @return [type] [description]
*/
protected function getLanguagePath() {
if (is_dir($langPath = $this->basePath('language'))) return $langPath;
return parent::getLanguagePath();
}
//------------------以上方法都是重写父类文件中的方法
//
99.在app目录下新建 config 目录 并新建 文件 routes.php register.php app.php 等配置文件
每一个配置文件return 一个数组,以resiter.php为例:
resiter.php
return [
'aliases' => [//abstract => alias
'Illuminate\Support\Facades\App' => 'App',
'Illuminate\Support\Facades\Blade' => 'Blade',
'Illuminate\Support\Facades\Cookie' => 'Cookie',
'Illuminate\Support\Facades\File' => 'File',
'Illuminate\Support\Facades\Input' => 'Input',
'Illuminate\Support\Facades\Redirect' => 'Redirect',
'Illuminate\Support\Facades\Request' => 'Request',
'Illuminate\Support\Facades\Response' => 'Response',
'Illuminate\Support\Facades\Session' => 'Session',
],
//说明,这里有的文件在lumen框架中找不到,但是我们可以查看 verdor目录下 扩展文件,找到后引入.
'providers' => [
'App\Providers\AppServiceProvider',
'App\Providers\DbServiceProvider',
'App\Providers\RouteServiceProvider',
],
'middleware' => [
'App\Http\Middleware\ExampleMiddleware',
],
'routeMiddleware' => [//alias => abstract
'test' => 'App\Http\Middleware\ExampleMiddleware',
]
];
详细看下服务器提供者:
'providers' => [
'App\Providers\AppServiceProvider',
'App\Providers\DbServiceProvider',
'App\Providers\RouteServiceProvider',
],
看下这个代码:
App\Providers\RouteServiceProvider
逻辑按照:
bootstrap/app.php 中 第 106行:
这个代码进行改装:
$app->router->group([
'namespace' => 'App\Http\Controllers',
], function ($router) {
require __DIR__ . '/../routes/web.php';
});
改成:
Route::group(['namespace' => $this->namespace], function ($router) {
require $router->app->getConfigurationPath('routes');
});
和上面的一样。