项目目录说明
v2.7开始在入口文件中可灵活配置各个目录组成,以下为推荐的目录结构
事实上在cmlphp里整个项目目录结构是可以完全自定义的、这边只讨论官方推荐的目录结构
下载框架项目推荐目录骨架,执行composer udpate
(建议),可看到如下结构:
projxxxxxxxxx 目录是项目所在根目录。
proj后加上一串加密串目的是为了防止当其路径存放在站点目录下时恶意用户通过工具猜测到项目目录,获取到模板文件及log文件,很多采用开源php框架的站点就常常被发现这个问题,当然最好是将projxxxxx
目录部署到站点根目录的上一级,即站点根目录配置到projxxx/public
目录.
开始开发前前先修改这个目录名、修改完将index.php中CML_APP_PATH
相应修改即可
下面展开对projxxxxxxxxx目录做详细说明:
proxxx/Application目录
Application
目录为整个项目的应用存放目录,假定我们有一个项目,该项目下有web
、admin
、api
三个应用,则目录下就有web
、admin
、api
三个应用目录,这边提供默认的web
应用目录。
web
proxxx/Application/web
目录为当前项目下的其中一个应用。一个项目下可能有多个应用。每个应用目录都包含了上线所需的所有配置、控制器、模型、视图、静态文件等,迁移的时候直接把应用目录copy走就好了。下线的时候要只要整个应用目录移除。避免了传统的我们上线/下线一个应用得跑到config/controller/model/static/view下分别发布/删除文件。
- web/Config 为web应用配置存放目录,web应用中独立的配置存放在这个目录下.
- web/Controller 为应用控制器存放的路径我们在其下面看到了DefaultController.php文件以下为文件的内容
<?php namespace web\Controller;
use Cml\Controller;
use Cml\View;
class DefaultController extends Controller
{
public function index()
{
echo '欢迎使用cml框架,应用初始化成功';
}
}
关于命名空间及其它参考控制器章节
web/Lang可选 为web应用语言包存放目录具体请参考 语言包章节
web/Model 可选 为web应用模型文件存放目录 具体请参考模型章节
web/Resource 可选 为web应用静态文件存放目录,应用下所有的静态资源都存放在这个目录下如:js、css、sass等
web/Plugin 可选 为web应用插件存放目录 具体请参考 插件章节
web/Service 可选 为web应用服务存放目录
web/View 可选 这web应用存放模板文件目录
proxxx/Config目录
Config
目录即为项目全局配置文件存放目录,框架会自动识别当前运行的环境是 开发/cli(计划任务下)/正式环境,读取相应目录下的配置文件。下面对Config
目录下的文件做详细说明自v2.7.2起。cli/development/product
这三个环境的判断组件也是可拨插替换的。也就是说假如你觉得cli/devolopment/product
不够用,想分成按照域名加载配置文件。如http://dev.com 从dev.com
目录取配置。http://pro.com
从pro.com
取配置。自己实现一个服务即可。修改入口中下面的配置为自已实现的服务.
//必须绑定。环境解析。自带的服务实现development/product/cli三种。可以根据需要实现更多的环境Cml::getContainer()->singleton('cml_environment', \Cml\Service\Environment::class);
cli
proxxx/Config/cli
为通过命令行运行的时候加载的配置文件存放目录
development
proxxx/Config/development
为开发环境加载的配置文件存放目录
product为正式环境加载的配置文件存放目录
proxxx/Config/product
为正式环境加载的配置文件存放目录
cli/development/product
这三个目录下都会默认生成一个normal.php
的配置文件,该文件为主配置文件即框架会自动加载,具体请查看 配置文件章节
common.php
common.php
为公用配置文件,也就是无论是cli还是product或者是development的环境都会自动加载的配置文件
plugin.php
plugin.php
为插件配置目录,也是cli/product/development共用 关于插件请参看 插件章节
route.php
route.php
为路由配置,也是cli/product/development共用 关于路由的使用请参看 路由章节
proxxx/Store目录
Store
目录为运行时目录,该目录下存放了系统运行时的一些临时文件,下面做详细说明
Cache
该目录该目录下存放了模板渲染后的缓存及系统缓存使用文件缓存时生成的缓存文件
Data
框架会对数据库的表字段结构缓存在此目录下,所以线上环节如果有修改了主键名,请清空该目录
Logs
系统在开发环境会把警告以下的错误直接显示在控制台,致命错误/异常直接显示在页面上方便开发人员排查。如果是线上环境会将警告及以上的信息记录在此目录下的emergency.log中(底层是调用\Cml\Log::emergency)。按日期分目录存放(如20160801的日志则存放在Runtime/Logs/2016/08/01/emergency.log
中),方便排查,同时使用 \Cml\Log::xxx`相关方法记录的日志会分类存放在该目录下。具体可参考日志
public目录 (可选)
该目录为站点对外目录,在服务器配置方便修改的情况下入口文件也在这个目录下,在框架推荐的分应用模式下,上线后通过系统命令会将projxxx
下的所有应用下Resource目录
映射到public
下。详情查看 静态资源管理