laravel5与laravel4在应用层上有很大的变化,主要变化有app目录结构,支持中间件等。
laraval5 多应用修改只需要改变自动加载即可。为了可复制性,可以定义一个应用名常量,后续增加应用可直接复制public和apps目录下应用,无需其它修改。
以 wap 应用为例:
在框架根目录下的public中新建目录 wap 并把原public 下所有文件剪切到wap中
在wap目录中打开 index.php 文件,在顶部添加代码:
1
|
define(
'APP_NAME'
,
basename
(__DIR__));
//定义当前应用名
|
如图:
修改index.php中两个引入文件路径:
1
2
3
4
|
require
__DIR__ .
'/../../bootstrap/autoload.php'
;
$app
=
require_once
__DIR__ .
'/../../bootstrap/app.php'
;
|
特别说明:框架根目录下 artisan 命令行调用文件,也需要复制到public/wap目录中,否则在执行命令行功能时无法加载到对应的应用功能,修改方法与 index.php 相同。如果没有命令行功能要求可不做修改。
注:标准修改中会变动到内核类自动加载配置文件,但可以相对熟悉下框架的加载情况,如不想修改内核配置文件,可不修改内核配置而直接在 index.php 文件中的 require __DIR__ . '/../../bootstrap/autoload.php'; 代码下面添加如下代码:(代码中同时给出添加空命名空间的加载方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
//自动加载器
$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'
,
]);
|
如图:
打开 \bootstrap\app.php 文件,在创建 $app 对象下面添加代码:
1
2
3
4
|
/*修改应用所在根目录*/
$app
->instance(
'path'
,
realpath
(__DIR__ .
'/../apps/'
. APP_NAME));
/*修改公共目录*/
$app
->instance(
'path.public'
,
realpath
(__DIR__ .
'/../public/'
. APP_NAME));
|
如图:
在框架根目录下把 app 目录名改成 apps 并在 apps 中新建目录 wap 把原 app 中所有目录及文件剪切到 wap 目录中:
打开 \vendor\composer\autoload_psr4.php 文件,修改 App\\ 命名空间所在目录:(可跳过)
1
|
'App\\'
=>
array
(
$baseDir
.
'/apps/'
. APP_NAME),
|
如图:
打开 \vendor\composer\autoload_classmap.php 文件修改应用所在的命名空间目录:(可跳过)
1
|
$appDir
=
$baseDir
.
'/apps/'
. APP_NAME;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
'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'
,
|
如图:
在 \resources\views 目录下新建 wap 目录 ,用于存放当前应用的所有视图文件:
打开 \config\view.php 文件修改视图所在目录:
1
2
3
|
'paths'
=> [
realpath
(base_path(
'resources/views'
) .
'/'
. APP_NAME),
],
|
如图:
修改到这里整个 wap 应用就可以正常使用了,需要注意的是 apps/wap/ 下所有的类必需以 App\ 命名空间开始,如果要添加Service 目录则命名空间为 App\Service\ 。
修改中可能需要改动 /vendor/ 目录下的几个加载配置文件,如果在index.php 添加对应的自动加载覆盖代码,即可跳过修改配置文件。
对于应用的配置 config 这个目录,不建议改动,一般大部分配置可公用,所以可以根据应用名常量来动态的改变配置参数。
本文转自 ttlxihuan 51CTO博客,原文链接:http://blog.51cto.com/php2012web/1734088