前言
该文章内容仅限于互相探讨与学习。希望为普及Laravel
和PHP
编程思想出一份力!
正题
由于最近一些朋友在使用laravel框架的时候碰到了一个非必须解决的问题,可能也是有存在一部分强迫症的原因吧。
具体需求是这样的。
Laravel框架是基于Composer设计的,项目所依赖的文件非常的多,同时在web根目录下会有着一箩筐的文件,单单vendor文件夹里有着5000+的文件。看起来不美观的同时,每一次新建一个项目,都必须重新导入laravel框架放在根目录下。对于项目的建立管理也是不方便的。于是朋友们提出了一个需求,希望laravel的框架独立,多项目共用框架,目录结构干净等等。
虽然这个需求多多少少是偏离了laravel本身的设计思路和结构,但是用过CodeIgniter,ThinkPHP的开发者一定还是受不了这样的结构方式吧。有种一进门就眼花缭乱的感觉。(当然,题外话。用了那么多的PHP框架,个人还是觉得TP框架更适合新手,成本更低,更加适合创业型公司。同时,看了ThinkPHP7新的结构,特别期待它的完善)
虽然我在两年前碰过laravel,但是那时候并非比较主流的框架,就随便看了看。所以,我用laravel最新的5.3做个结构改变的方案供大家学习。有什么不对的地方可以留言,欢迎探讨。
我也在业余时间帮朋友把Laravel框架重新进行了调整,以适应他们的需求。
有兴趣的朋友可以去github下载来看看。
https://github.com/lynk-coder/lynk-public-laravel/
教程
那么我们先看看最终改成的目录结构会变成什么样子:
这么做的目的,是将我们可爱的laravel框架彻底分割出去,同时根据自己的需求去切换自己项目所需求的框架。那么我们开始进行一步步的修改和调整。
首先我们要保证PHP在5.6及以上的版本。
我们先从项目基本结构先改,然后再修改框架。
1、<project>/public/index.php
我们在public文件夹里,把index.php进行一些修改。
我们在代码里面加入一些内容,这三段代码放在最开头的位置
define('APPLICATION_WEB_ROOT',__DIR__."/../");
define('LARAVEL_FRAMEWORK_DIR',APPLICATION_WEB_ROOT.'/../framework/laravel5.3');
require APPLICATION_WEB_ROOT.'/../vendor/autoload.php';
其次,我们将原来的
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
改成
require LARAVEL_FRAMEWORK_DIR.'/bootstrap/autoload.php';
$app = require_once LARAVEL_FRAMEWORK_DIR.'/bootstrap/app.php';
这样,我们的index.php改好了。
2、我们在< project >的同级目录下,新建framework,在framework下面建立laravel5.3目录,将bootstrap,vendor(框架文件),.env移动到laravel5.3目录里面,同时新建目录common。
3、我们在< project >下面建立目录vendor,将config,database,resources