laravel 学习中对模块、验证类、模型的疑惑

验证类问题

php artisan make:request ArticleRequest

创建的目录是app\Http\Requests\ArticleRequestPost

<?php

namespace App\Http\Requests;

class ArticleRequestPost extends FormRequest{
    public function rules(){
        return [
            'title'=>'required'
        ]
    }
}

我使用了Dcat admin,composer 安装后在生成了app\Admin\Controllers的目录

如果我在 app\Admin\Controllers 的控制器的方法中调用 app\Http\Requests\ArticleRequestPost 是否合乎开发规范呢?

模块问题

使用dcat admin,composer安装后,放置在app目录下,那多个模块都可以放置在app下吗?

// 这样的目录是被允许呢?
 app
 --Admin [dcat admin 模块]
 ----Controllers
 --Forum [论坛模块]
 ----Controllers
 --Mall  [商城模块]
 ----Controllers
 --Http [默认存在的 Http]
 ----Controllers

Http目录

Http 目录包含了控制器、中间件以及表单请求等,几乎所有通过 Web 进入应用的请求的逻辑都在这里进行

以上是摘抄官方文档的

如果是api项目前后端分离,多个模块的,目录应该是什么样子的呢?

模型问题

按照laravel开发规范文档中的说明,所有的模型都应该放在app\Models下

那是否可以多级呢?

如:数据表中的用户相关的表
member_authoirze,member_address,member_integral

商品相关的表
goods,good_unit,good_category,good_spec,

// 以下目录是否被允许呢? 命令空间 App\Models\Member
app
--Models
----Member
------MemberAuthorize.php
------MemberAddress.php
----Goods
------Goods.php
------GoodUnit.php
------GoodCategory.php

一般业务逻辑放在模型里面是否合适呢,还是放置在service或者logic层?

如:我要获取一个商家的商品,在app\Models\Goods.php 中声明

 public function getUpList(){}
 public function getListById(){}

这个方法写在model里面个人觉得很不友好,

我要保存一个商品的时候,要实例化模型,然后赋值,然后保存

 $goods=new Goods();
 $goods->title=request()->input('title');
 $goods->intro=request()->input('intro');
 $goods->save();

上述代码实例化,拥有了基础属性信息,诸如 title、intro、thumb等,
但同时也拥有了很多业务层面封装的方法,如getUpList(),getListById(),getListByCategoryId()
然后会越来越臃肿,基础的属性和大量的业务逻辑混合在一起

有必要抽离出来呢?还是就一股脑的写在model里面?抽离的话是定义service还是logic层呢?

service、logic目录如何创建呢?

诸如:

 // 新建service、logic目录是否被允许呢?
 app
 --Http
 --Models
 --Servcie
 --Logic

学习laravel的过程中的一点点疑问,学习的同时也看到 Laravel 项目开发规范 所以让自己学习的过程中能够规范编码

最后:在laravel开发的项目中,希望学习、了解更多规范的,合理的目录结构,是什么样子的呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

1. 验证类问题

你说的调用是将 ArticleRequestPost 实例化然后调用方法吗? 不符合规范,不符合单一职责,如果你已经创建了验证类,应该使用 依赖注入 的方式传参,分层管理,既确保了控制器接收到的参数是正确的又避免臃肿,每个模块应该负责自己的功能。

2. 模块

这样建立文件夹管理每个模块是没问题的

3. HTTP 目录问题

前后端分离的项目同样都是放在 HTTP 文件夹,目录常规是这样的

...
HTTP
----Controller
--------API
...

4. 模型问题

如果一个表有多个从表,可以像你这样建立独立文件夹,这样方便管理,更直观,这是没问题的。

业务逻辑一般是放到 App\Services 命名空间内,数据自定义读写可以在可以在模型中处理,也可以在 App\Repository

之所以分离 ServicesRepository 在面对多个前端接口的时候,业务逻辑可以一劳永逸,我们只需要在控制器中调用他们即可。

2年前 评论
MArtian (作者) 2年前
magein (楼主) 2年前
讨论数量: 4
w0rdyyp

多看看官方文档 reqest定义好之后 直接控制器中依赖注入引进来就行;逻辑放在services层;模型放models文件夹够用了

2年前 评论
magein (楼主) 2年前

1. 验证类问题

你说的调用是将 ArticleRequestPost 实例化然后调用方法吗? 不符合规范,不符合单一职责,如果你已经创建了验证类,应该使用 依赖注入 的方式传参,分层管理,既确保了控制器接收到的参数是正确的又避免臃肿,每个模块应该负责自己的功能。

2. 模块

这样建立文件夹管理每个模块是没问题的

3. HTTP 目录问题

前后端分离的项目同样都是放在 HTTP 文件夹,目录常规是这样的

...
HTTP
----Controller
--------API
...

4. 模型问题

如果一个表有多个从表,可以像你这样建立独立文件夹,这样方便管理,更直观,这是没问题的。

业务逻辑一般是放到 App\Services 命名空间内,数据自定义读写可以在可以在模型中处理,也可以在 App\Repository

之所以分离 ServicesRepository 在面对多个前端接口的时候,业务逻辑可以一劳永逸,我们只需要在控制器中调用他们即可。

2年前 评论
MArtian (作者) 2年前
magein (楼主) 2年前
自由与温暖是遥不可及的梦想

其实规范这东西

要自己团队定义

规范大多用于自己的团队

只要自己调动掉这个东西 怎么样都可以

这个取决于你们团队怎么去决定 或者自己怎么去决定

2年前 评论
magein (楼主) 2年前

laravel 框架本身有一套默认的目录规范,相关的脚手架也是准许这个默认规范做处理的,这些在文档中都有一定的介绍。

目前你这边遇到的问题是担心自己新增的一些目录是否符合 laravel 的规范,其实不用太担心。我这边认为只要目录清晰易于分类,不需要过分纠结于规范。因为 laravel 框架支持扩展,同时默认的规范对扩展部分并没有严格的要求。就比如上面提到的多模块支持。

下面列下目前项目用到的目录结构,仅供参考

app
 - Http
   - Controllers
     - Admin # 模块
       - XxxController.php
       - ...
     - Front # 模块
       - XxxController.php
       - ...
   - Middleware
     - Xxx # 分组
       - Xyz.php
     - Zzz.php #全局中间件/唯一中间件
   - Requests
     - Admin
       -  Blog
         - StoreRequest.php
         - UpdateRequest.php
       - ...
     - Front
       - User
         - LoginRequest.php

 - Models
   - Blog
     - Xxx.php
   - Yyy.php
   - Zzz.php
   - ...
 - 依次类推
2年前 评论
magein (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!