我之前写过详细的thinkphp目录设计总结;
thinkphp的目录结构设计经验总结
laravel的话;
换laravel真的需要勇气;去面对六眼飞鱼;
目录结构首先就够让新手懵一会了;
这么多目录可怎么下手;
既然是面向thinkphp开发者;
我这里准备先以tp的方式讲;
laravel-bjyadmin
├─app
│ ├─Console
│ ├─Exceptions
│ ├─Http 请求处理
│ │ ├─Controllers 控制器目录
│ │ ├─Middleware
│ ├─Providers
│ ├─Library [+] 自定义类库目录
│ │ ├─Function [+] 自定义函数库
│ │ ├─Org [+] 自定义类
│ ├─Models [+] 模型文件夹
├─bootstrap
├─config 配置项
├─database
├─public
├─resources
│ ├─assert
│ ├─lang
│ ├─views 视图
├─routes 路由
├─storage
├─tests
为了尽快入门;
我把目录简化了下;
先以我备注了中文的目录为主;
其他的目录先暂时忽略了;
laravel也是MVC框架;
咱先掌握了这最基本的三项;
就可以初步的写项目了;
thinkphp-bjyadmin
├─Application 项目逻辑目录
│ ├─Common 公共模块
│ │ ├─Common 公共函数目录
│ │ │ ├─functioin.php 公共函数php文件
│ │ ├─Conf 公共配置文件目录
│ │ │ ├─config.php tp的配置 用于覆盖框架默认配置项
│ │ │ ├─db.php 数据库配置 用户名 密码等
│ │ │ ├─webconfig.php 项目的配置;网站名;是否开启网站等
│ │ ├─Controller 公共控制器目录
│ │ │ ├─BaseController.class.php 应用最基础的控制器
│ │ │ ├─HomeBaseController.class.php Home基础控制器继承BaseController
│ │ │ ├─AdminBaseController.class.php Admin基础控制器继承BaseController
│ │ │ ├─UserBaseController.class.php User基础控制器继承BaseController
│ │ │ ├─...
│ │ ├─Model 公共模型目录
│ │ │ ├─BaseModel.class.php 应用最基础的Model
│ │ │ ├─ArticleModel.class.php 文章model 继承BaseModel
│ │ │ ├─UserModel.class.php 用户model 继承BaseModel
│ │ │ ├─...
│ │ ├─Tag 公共标签目录
│ │ │ ├─My.class.php 自定义的标签库
│ │ │ ├─...
│ ├─Home Home模块
│ │ ├─Controller Home控制器目录 继承HomeBaseController
│ │ │ ├─ArticleController.class.php 文章控制器目录
│ │ │ ├─IndexController.class.php 首页控制器
│ │ │ ├─ ...
│ ├─Admin Admin模块
│ │ ├─Controller Admin控制器目录 继承AdminBaseController
│ │ │ ├─IndexController.class.php 后台管理首页控制器
│ │ │ ├─ ...
│ ├─User User模块
│ │ ├─Controller User控制器目录 继承UserBaseController
│ │ │ ├─IndexController.class.php 用户个人中心首页控制器
│ │ │ ├─ ...
thinkphp是以模块划分项目的;
如上我在 laravel-bjyadmin 示例中就划分了 Common 公共模块;
还有 Admin、Home、User模块;
路由就是自动绑定的 模块/控制器/方法
三级;
模型、控制器、视图、配置项等都是在模块下面;
反观 laravel;
已经可以初窥自由了;
但是这种自由也会让新手略有不知所措;
那么我们依然可以以 thinkphp 的模式来理解;
M;
laravel 没有强制定义模型的目录;
默认给了一个 User 模型就是直接给扔到 app 目录下了;
为了防止模型比较多的时候把 app 目录下搞的乱七八糟;
我这里是在 app 目录下建了一个 Models 目录;
所有的模型都放在app/Models
目录下;
app
├─Models 模型目录
│ ├─Category.php 分类模型
│ ├─Tag.php 标签模型
│ ├─Article.php 文章模型
C;
把控制器放在视图前面讲;
控制器是在app/Http/Controllers
目录下;
我依然以 thinkphp-bjyadmin 的结构来划分;
app
├─Http 请求处理目录
│ ├─Controller 控制器目录
│ │ ├─admin 后台Admin模块
│ │ │ ├─IndexController.php 后台首页控制器
│ │ │ ├─CategoryController.php 分类管理控制器
│ │ ├─home 前台Home模块
│ │ │ ├─IndexController.php 前台首页控制器
│ │ │ ├─ArticleController.php 文章展示控制器
│ │ ├─user 用户User模块
│ │ │ ├─IndexController.php 用户首页控制器
│ │ │ ├─TagController.php 标签管理控制器
V;
html视图都是在 resources/view
目录下;
视图就可以按照控制器的目录来了;
resources
├─view 视图目录
│ ├─admin 后台admin模块下的视图目录
│ │ ├─index 后台admin模块Index控制器下的视图目录
│ │ │ ├─index.blade.php 后台admin模块Index控制器下index方法的视图文件
│ │ ├─category 后台admin模块Category控制器下的视图目录
│ │ │ ├─index.blade.php 后台admin模块Category控制器下index方法的视图文件
│ │ │ ├─create.blade.php 后台admin模块Category控制器下create方法的视图文件
│ ├─home 前台Home模块下的视图目录
│ │ ├─index 前台Home模块Index控制器下的视图目录
│ │ │ ├─index.blade.php 前台Home模块Index控制器下index方法的视图文件
│ │ ├─article 前台Home模块Article控制器下的视图目录
│ │ │ ├─index.blade.php 前台Home模块Article控制器下index方法的视图文件
│ │ │ ├─create.blade.php 前台Home模块Article控制器下create方法的视图文件
│ ├─user 用户User模块下的视图目录
│ │ ├─index 用户User模块Index控制器下的视图目录
│ │ │ ├─index.blade.php 用户User模块Index控制器下index方法的视图文件
│ │ ├─tag 用户User模块Tag控制器下的视图目录
│ │ │ ├─index.blade.php 用户User模块Tag控制器下index方法的视图文件
│ │ │ ├─create.blade.php 用户User模块Tag控制器下create方法的视图文件
thinkphp 模块下是有公共函数文件 function.php ;
laravel 没有定义目录;
我是给定义在 app/Library/Function/helpers.php
;
thinkphp 模块下是有配置项文件的;
laravel 没有按模块;
而是统一放在了 跟目录的 config
目录下;
就 mvc 而言的话;
laravel 多了一个定义路由的过程;
路由都是在 routes/web.php
文件中定义的;
这里寥寥几句简单把用到的目录先介绍下;
有个初步的印象即可;
后续再详细讲解每个模块;
我已经在我最新的 laravel-bjyblog 项目中使用这种结构;
想在完整的项目中理解的话;
可以关注 用laravel重构的白俊遥博客开源代码laravel-bjyblog
现在是在内测中;
可能会有大的改动;
不过用来参考还是可以的;
前台的路由为了兼容 thinkphp-bjyblog
的设计;
没有完全按照本篇文章的讲解;
本文为白俊遥原创文章,转载无需和我联系,但请注明来自白俊遥博客https://baijunyao.com 欢迎捐赠赞赏加入组织创建QQ群及捐赠渠道
xxb :V; 里的 views 都少了 s,图片里也少了
2020-01-07 09:47:28 回复
:正在学习。。
2017-12-11 14:55:39 回复
:test
2017-10-31 16:12:00 回复
金松 :白老师,久久未来,这段时间在学js方面的知识。刚好也在了解 laravel这块儿,最初是接触tp这个框架来学习php的,开发也是分的前端后端,但是看了很多laravel的开源项目,发现不知道前端要怎么修改了,所以,希望还能教教这方面,看看怎么好入手laravel
2017-09-03 01:45:53 回复
云淡风晴 :前端是一大块;这得开系列文章慢慢讲;
2017-09-09 00:26:06 回复
new soul :gfdgdfgfd
2017-08-20 09:11:00 回复
健♂ :test
2017-08-23 15:54:11 回复
健♂ :test
2017-08-23 15:54:31 回复
蓝天白云 :我喜欢把Models文件夹放到Http文件夹下面,和Controllers平级
2017-07-19 18:21:57 回复
云淡风晴 :参考了许多项目后;为了跟多数人的习惯保持一致;减少别人适应的时间;我最后是决定放app目录下了;
2017-07-24 22:57:18 回复
小川☆哲梦 :很棒
2017-10-26 15:06:34 回复
isu5 :还是喜欢index.php在根目录
2017-07-19 17:30:08 回复
云淡风晴 :相比于在跟目录;laravel 这种放在 public目录下的更加安全合理些;
2017-07-24 22:58:02 回复
找电影上琵琶影院 :有个问题请教下,nginx root 指向我的一个site目录,并没有直接指public,然后访问路由是 ip/项目名/public/ 这样只能访问默认的首页,配置其他路由在访问就都是404,请问这是为什么呢?直接指向public是可以的
2017-11-27 17:21:47 回复
isu5 :没有看到css 文件放在什么地方
2017-07-19 17:20:03 回复
Serene :对于中间件/策略类/gate/ACL/can这几个的用法和关系,我有点搞混了,你能帮忙解释一下吗
2017-07-19 17:16:51 回复
云淡风晴 :这个三言两语还真说不清;先自己试着理解;我过后抽出时间了详细写文章;
2017-07-24 23:01:38 回复
Serene :恩恩,写了半个月的laravel,渐渐了解了。
2017-07-24 23:17:58 回复
Serene :白大,能不能上传个带依赖包的laravel_bjyblog?
2017-07-18 18:06:33 回复
云淡风晴 :laravel-bjyblog还有好多的问题在处理;发了意义不大;
2017-07-24 23:05:48 回复
new soul :ggfdgfdg
2017-08-20 09:11:41 回复
Serene :laravel_bjyblog这个项目,composer install后,php artisan migrate报错:PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/data/wwwroot/default/laravel-bjyblog/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /data/wwwroot/default/laravel-bjyblog/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107Stack trace:#0 /data/wwwroot/default/laravel-bjyblog/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php(37): Monolog\Handler\StreamHandler->write(Array)#1 /data/wwwroot/default/laravel-bjyblog/vendor/monolog/monolog/src/Monolog/Logger.php(337): Monolog\Handler\AbstractProcessingHandler->handle(Array)等等
2017-07-18 18:04:28 回复
云淡风晴 :没有权限;
2017-07-24 23:10:40 回复
云淡风晴 :修改配置项数据库链接;
2017-07-24 23:15:21 回复
gongchixin :不知道为什么 使用laravel 开发了半个月了 始终没有感觉得优雅 ,反而十分的繁琐,我不是在指路由(这个功能很好) 而是(比如 request responses collection ORM) 各种繁琐 各种重复的东西 ,虽然理解存在即合理,但是能否举例说明到底 laravel到底优秀在哪里?是否对开发效率有很大的提升?还是 对大型项目的设计会比较好?还是面向对象设计会比较方便?
2017-07-18 12:05:57 回复
云淡风晴 :laravel 就是面向对象; 优雅在超低的耦合度; 对新技术的运用; 规范合理的构架等等;
2017-07-24 23:13:40 回复
吴伟祥 :白师傅,加油!一直关注你!
2017-07-17 23:22:32 回复
Beisha :php中的“面向对象”来源于java,而java又源自于C。之所以有php,主要是其大道至简的本质。而php版本7.1的开发者之一,鸟哥也声称他并不喜欢增加更多的“语法糖”。有些偏离其当初的方向。不过laravel 真的优雅~
2017-07-17 10:07:33 回复
爱便流通于世 :666
2017-07-17 10:12:55 回复
Beisha :YII更偏向于面向对象。laravel 的有些语法糖,“优雅”过头了。
2017-07-17 10:00:53 回复
爱便流通于世 :不是啊 laravel 就是面向对象 只不过他封装好了 理解容器 里面的 trait 都是很好的 许多的 packagist包 composer配置一下就可以用 还有 migrate 等等 很多的东西都要去深入了解的 马上 laravel 5.5 LTS版 就要出来了,嘿嘿!
2017-07-17 10:08:47 回复
爱便流通于世 :就是要 优雅
2017-07-17 10:09:13 回复
爱便流通于世 :目录结构很不错!!!
2017-07-17 08:45:08 回复
最新评论