作为程序员一定要保持良好的睡眠,才能好编程

第十二课laravel 目录改造 结构改造

发布时间:2018-10-09


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');

    });


  和上面的一样。