如何用composer来构建自己的MVC项目
如何使用composer来构建项目
为什么需要用composer来构建项目呢?
大致有两个方面的原因:
1、解决项目中各代码库之间的依赖关系。
2、使用composer来做自动加载,减少手动require/include。再通过MVC和路由规则,一步一步让我们告别散装代码。提高代码的可读性,方便后期维护。
概述
Composer是PHP的一个依赖管理工具,不是一个包管理器。它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在项目的某个目录中(例如 vendor)进行安装。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。
下面说明如何使用composer,逐步构建一个基于MVC的简单PHP项目。
1、cd 项目目录,创建composer.json
有两种方式:可以在自己的项目下创建composer.json,以便定义项目的依赖包。也可以通过composer init交互式的创建composer.json。
说明:如果使用composer init,接下来就会自动提示填写项目相关信息,当然每一项都有默认值,不填的话也可以,一路回车即可
最后在项目目录下面会自动生成一个composer.json文件
下面是我使用composer init,一路回车,最后自动生成的composer.json中的内容:
2、执行命令:composer install
composer install : 从当前目录读取 composer.json 文件,处理依赖关系,并把依赖安装到 vendor 目录下。
此时,项目下面,会生成一个vendor文件夹以及composer.lock文件
说明:composer.lock这个文件主要是解决在协同开发中组件及其依赖的版本记录,防止不同人使用的组件及依赖版本不同。
我们看下composer目录中的内容:
3、构建新的项目
接着我们手动创建几个目录,如下图
然后我们再创建两个文件,分别是app/Helpers/functions.php、utils/log.php。
现在有一个问题:app是我们本地自定义的目录,functions.php、log.php这两个文件也是我们自定义的,这些目录和文件并不是在vendor中,那就说明还没用到composer的自动加载。
有没有办法,让这些自定义的目录或者文件也通过composer自动加载进去呢?答案是肯定有的!
按照上面的配置,在composer.json中增加autoload相应的配置
然后,执行命令 composer dump-autoload
看到上面的显示,就表示成功了。凑是这么简单!可能有盆友表示,我这都还没看明白了,就能自动加载进去啦?
下一篇文章,我们尝试着对composer源码进行分析,来看看 composer 是如何实现 PSR4标准的自动加载功能。