Laravel5多應用修改

laravel5與laravel4在應用層上有很大的變化,主要變化有app目錄結構,支持中間件等。


laraval5  多應用修改只需要改變自動加載即可。爲了可複製性,可以定義一個應用名常量,後續增加應用可直接複製public和apps目錄下應用,無需其它修改。


以 wap 應用爲例:


在框架根目錄下的public中新建目錄 wap 並把原public 下所有文件剪切到wap中

wKiom1aUW-nDmgh8AAC2O0vz2TQ615.png



在wap目錄中打開 index.php 文件,在頂部添加代碼

define('APP_NAME', basename(__DIR__)); //定義當前應用名

如圖:

wKiom1aUXGWTHKtcAAAgyeTdZAs343.png



修改index.php中兩個引入文件路徑

require __DIR__ . '/../../bootstrap/autoload.php';


$app = require_once __DIR__ . '/../../bootstrap/app.php';

特別說明:框架根目錄下 artisan 命令行調用文件,也需要複製到public/wap目錄中,否則在執行命令行功能時無法加載到對應的應用功能,修改方法與 index.php 相同。如果沒有命令行功能要求可不做修改。


注:標準修改中會變動到內核類自動加載配置文件,但可以相對熟悉下框架的加載情況,如不想修改內核配置文件,可不修改內核配置而直接在 index.php 文件中的 require __DIR__ . '/../../bootstrap/autoload.php';  代碼下面添加如下代碼:(代碼中同時給出添加空命名空間的加載方法)

//自動加載器
$classLoader = ComposerAutoloaderInit61a2eae33d1ec273aa64b59b5c8cbd67::getLoader();
//框架根目錄
$baseDir = dirname(dirname(__DIR__));
//外層目錄,無命名空間,如同laravel4中的ClassLoader::addDirectories($dirs)
$classLoader->addPsr4(null, [
    $baseDir . '/models',
    $baseDir . '/services',
]);
//應用
$classLoader->addPsr4('App\\', array($baseDir . '/apps/' . APP_NAME));
//類地圖
$appDir = $baseDir . '/apps/' . APP_NAME;
$classLoader->addClassMap([
    'App\\Console\\Commands\\Inspire' => $appDir . '/Console/Commands/Inspire.php',
    'App\\Console\\Kernel' => $appDir . '/Console/Kernel.php',
    'App\\Events\\Event' => $appDir . '/Events/Event.php',
    'App\\Exceptions\\Handler' => $appDir . '/Exceptions/Handler.php',
    'App\\Http\\Controllers\\Auth\\AuthController' => $appDir . '/Http/Controllers/Auth/AuthController.php',
    'App\\Http\\Controllers\\Auth\\PasswordController' => $appDir . '/Http/Controllers/Auth/PasswordController.php',
    'App\\Http\\Controllers\\Controller' => $appDir . '/Http/Controllers/Controller.php',
    'App\\Http\\Kernel' => $appDir . '/Http/Kernel.php',
    'App\\Http\\Middleware\\Authenticate' => $appDir . '/Http/Middleware/Authenticate.php',
    'App\\Http\\Middleware\\EncryptCookies' => $appDir . '/Http/Middleware/EncryptCookies.php',
    'App\\Http\\Middleware\\RedirectIfAuthenticated' => $appDir . '/Http/Middleware/RedirectIfAuthenticated.php',
    'App\\Http\\Middleware\\VerifyCsrfToken' => $appDir . '/Http/Middleware/VerifyCsrfToken.php',
    'App\\Http\\Requests\\Request' => $appDir . '/Http/Requests/Request.php',
    'App\\Jobs\\Job' => $appDir . '/Jobs/Job.php',
    'App\\Providers\\AppServiceProvider' => $appDir . '/Providers/AppServiceProvider.php',
    'App\\Providers\\AuthServiceProvider' => $appDir . '/Providers/AuthServiceProvider.php',
    'App\\Providers\\EventServiceProvider' => $appDir . '/Providers/EventServiceProvider.php',
    'App\\Providers\\RouteServiceProvider' => $appDir . '/Providers/RouteServiceProvider.php',
    'App\\User' => $appDir.'/User.php',
]);


如圖:

wKiom1aUa3LzfTZ7AADTaZe6M-k614.png



打開  \bootstrap\app.php 文件,在創建 $app 對象下面添加代碼

/*修改應用所在根目錄*/
$app->instance('path', realpath(__DIR__ . '/../apps/' . APP_NAME));
/*修改公共目錄*/
$app->instance('path.public', realpath(__DIR__ . '/../public/' . APP_NAME));

如圖:

wKiom1aUXWWCAb3rAAA_gWdSXwE963.png



在框架根目錄下把 app 目錄名改成 apps 並在 apps 中新建目錄 wap 把原 app 中所有目錄及文件剪切到 wap 目錄中

wKioL1aUXzrDqBQFAADthqP2f34866.png



打開 \vendor\composer\autoload_psr4.php  文件,修改 App\\ 命名空間所在目錄:(可跳過

'App\\' => array($baseDir . '/apps/' . APP_NAME),

如圖:

wKioL1aUX4PyUwh-AABo2bLte5s768.png



打開 \vendor\composer\autoload_classmap.php 文件修改應用所在的命名空間目錄:(可跳過

$appDir = $baseDir . '/apps/' . APP_NAME;
    'App\\Console\\Commands\\Inspire' => $appDir.'/Console/Commands/Inspire.php',
    'App\\Console\\Kernel' => $appDir.'/Console/Kernel.php',
    'App\\Events\\Event' => $appDir.'/Events/Event.php',
    'App\\Exceptions\\Handler' => $appDir.'/Exceptions/Handler.php',
    'App\\Http\\Controllers\\Auth\\AuthController' => $appDir.'/Http/Controllers/Auth/AuthController.php',
    'App\\Http\\Controllers\\Auth\\PasswordController' => $appDir.'/Http/Controllers/Auth/PasswordController.php',
    'App\\Http\\Controllers\\Controller' => $appDir.'/Http/Controllers/Controller.php',
    'App\\Http\\Kernel' => $appDir.'/Http/Kernel.php',
    'App\\Http\\Middleware\\Authenticate' => $appDir.'/Http/Middleware/Authenticate.php',
    'App\\Http\\Middleware\\EncryptCookies' => $appDir.'/Http/Middleware/EncryptCookies.php',
    'App\\Http\\Middleware\\RedirectIfAuthenticated' => $appDir.'/Http/Middleware/RedirectIfAuthenticated.php',
    'App\\Http\\Middleware\\VerifyCsrfToken' => $appDir.'/Http/Middleware/VerifyCsrfToken.php',
    'App\\Http\\Requests\\Request' => $appDir.'/Http/Requests/Request.php',
    'App\\Jobs\\Job' => $appDir.'/Jobs/Job.php',
    'App\\Providers\\AppServiceProvider' => $appDir.'/Providers/AppServiceProvider.php',
    'App\\Providers\\AuthServiceProvider' => $appDir.'/Providers/AuthServiceProvider.php',
    'App\\Providers\\EventServiceProvider' => $appDir.'/Providers/EventServiceProvider.php',
    'App\\Providers\\RouteServiceProvider' => $appDir.'/Providers/RouteServiceProvider.php',
    'App\\User' => $appDir.'/User.php',

如圖:

wKioL1aUYOXi2SUnAADab62QheY171.png




在 \resources\views 目錄下新建 wap 目錄 ,用於存放當前應用的所有視圖文件

wKiom1aUYWCQc7zGAACdbudPEfU924.png


打開 \config\view.php 文件修改視圖所在目錄:

'paths' => [
        realpath(base_path('resources/views') . '/' . APP_NAME),
    ],

如圖:

wKiom1aUYa6CPI5tAAAzbUo83Y0749.png


修改到這裏整個 wap 應用就可以正常使用了,需要注意的是 apps/wap/  下所有的類必需以 App\ 命名空間開始,如果要添加Service 目錄則命名空間爲  App\Service\ 。


修改中可能需要改動  /vendor/  目錄下的幾個加載配置文件,如果在index.php 添加對應的自動加載覆蓋代碼,即可跳過修改配置文件。


對於應用的配置  config 這個目錄,不建議改動,一般大部分配置可公用,所以可以根據應用名常量來動態的改變配置參數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章