关于laravel开发业务规划问题?

1.业务逻辑代码 新增Service好喃还是直接写到控制器或者模型里面喃?

2.开发中经常定义一些公共方法,方便控制层,模型层,业务层调用的这些,应该放哪儿喃?

3.自定义的配置信息应该放哪儿喃?3.自定义的配置信息应该放哪儿喃?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案
  1. Service 就在 app 目录下新建 Services 文件夹存放即可,由控制器来实现业务代码,和模型无关。这里控制器只需要把 Service 实例化,并且传入参数即可
    举例:

    // UserController
    public $service;
    public function construct(){
     $this->service = new UserService();
    }
    public function store(Request $request){
       $this->service->create($request->validData())  // 这里调用 UserService 的 create 方法
    }
  2. 你所说的通用方法是 指控制器有控制器的通用方法模型有模型的通用方法 ?如果是这样的话,就应该写在基础控制器中,方便所有同类型的类来调用
    举例:

     name App\Http\Controllers
    
     class UserController extends Controller
     {
     ...
     }
    
     namespace App\Http\Controllers;  // 所有控制器继承这个基础控制器,在基础控制器中写通用方法
     use Illuminate\Routing\Controller as BaseController;
     class Controller extends BaseController
     {
         use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
         public function get()
         {
             ...
         }
     }

如果是全局通用方法的话,就写在 helper 助手文件,通常都会封装在 app/helpers.php,然后让 composer 自动加载该文件

举例:

//    app/helpers.php
<?php
// 这里我封装了一个 is_url 方法
if (!function_exists('is_url')) { 
    /**
     * @param $str
     * @return bool
     */
    function is_url($str)
    {
        return filter_var($str,FILTER_VALIDATE_URL) == true;
    }
}

然后打开根目录的 composer.json 文件,让 composer 自动加载这个 helpers.php

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": [
            "app/helpers.php" // 添加这一行
        ]
    },

执行

composer dump-autoload

然后就可以在项目的任意地方调用 is_url() 方法了。


class UserController extends Controller
{
    public function checkAvatar($url)
    {
            return is_url($url);
    }
}

这是两种通用方法的添加方式,还有一种封装,就是 HandlerHander 是比 helper 助手函数更为复杂的处理函数,其设计思路也是全局通用。

helper 就像工具箱,需要钳子扳手,自己去拿来用,而 Handler 更像家用电器,比如 洗衣机洗碗机扫地机器人,它是作为一个 功能 存在的,我们需要它来为我们完成一些工作。

Handler 的封装是在 App/Handlers 路径,和 Controllers 一样。

举例:

<?php
namespace App/Handlers;
// 这里封装一个 图片上传的 handler
class ImageUploader
{
    public function save()
    {
    ...
    }
}

调用:

$uploader = new ImageUploader();
$uploader->save($request->file);

很简单,不赘述了。

  1. 自定义配置信息放在 config 文件夹,文件格式就参考其他同目录下的配置文件即可
    举例:
    // 新建文件 config/test.php
    <?
    return [
     'url' => env('APP_URL', null),
     'site' => [
             'name' => env('APP_NAME', null)
     ]
    ];
    调用
    config('test.url');
    config('test.site.name');
2年前 评论
讨论数量: 4
SanXiao

1、业务逻辑代码建议写在Service,这也是符合框架架构。 2、公共方法可以放在自己创建的公共类文件中。比如在app目录下创建Helper文件夹,在里面创建Helper文件专门放置公共方法。 3、laravel框架的配置信息统一放在根目录config文件夹。 建议多阅读laravel手册。

2年前 评论
SanXiao

1、业务逻辑代码建议写在Service,这也是符合框架架构。 2、公共方法可以放在自己创建的公共类文件中。比如在app目录下创建Helper文件夹,在里面创建Helper文件专门放置公共方法。 3、laravel框架的配置信息统一放在根目录config文件夹。 建议多阅读laravel手册。

2年前 评论
  1. Service 就在 app 目录下新建 Services 文件夹存放即可,由控制器来实现业务代码,和模型无关。这里控制器只需要把 Service 实例化,并且传入参数即可
    举例:

    // UserController
    public $service;
    public function construct(){
     $this->service = new UserService();
    }
    public function store(Request $request){
       $this->service->create($request->validData())  // 这里调用 UserService 的 create 方法
    }
  2. 你所说的通用方法是 指控制器有控制器的通用方法模型有模型的通用方法 ?如果是这样的话,就应该写在基础控制器中,方便所有同类型的类来调用
    举例:

     name App\Http\Controllers
    
     class UserController extends Controller
     {
     ...
     }
    
     namespace App\Http\Controllers;  // 所有控制器继承这个基础控制器,在基础控制器中写通用方法
     use Illuminate\Routing\Controller as BaseController;
     class Controller extends BaseController
     {
         use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
         public function get()
         {
             ...
         }
     }

如果是全局通用方法的话,就写在 helper 助手文件,通常都会封装在 app/helpers.php,然后让 composer 自动加载该文件

举例:

//    app/helpers.php
<?php
// 这里我封装了一个 is_url 方法
if (!function_exists('is_url')) { 
    /**
     * @param $str
     * @return bool
     */
    function is_url($str)
    {
        return filter_var($str,FILTER_VALIDATE_URL) == true;
    }
}

然后打开根目录的 composer.json 文件,让 composer 自动加载这个 helpers.php

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": [
            "app/helpers.php" // 添加这一行
        ]
    },

执行

composer dump-autoload

然后就可以在项目的任意地方调用 is_url() 方法了。


class UserController extends Controller
{
    public function checkAvatar($url)
    {
            return is_url($url);
    }
}

这是两种通用方法的添加方式,还有一种封装,就是 HandlerHander 是比 helper 助手函数更为复杂的处理函数,其设计思路也是全局通用。

helper 就像工具箱,需要钳子扳手,自己去拿来用,而 Handler 更像家用电器,比如 洗衣机洗碗机扫地机器人,它是作为一个 功能 存在的,我们需要它来为我们完成一些工作。

Handler 的封装是在 App/Handlers 路径,和 Controllers 一样。

举例:

<?php
namespace App/Handlers;
// 这里封装一个 图片上传的 handler
class ImageUploader
{
    public function save()
    {
    ...
    }
}

调用:

$uploader = new ImageUploader();
$uploader->save($request->file);

很简单,不赘述了。

  1. 自定义配置信息放在 config 文件夹,文件格式就参考其他同目录下的配置文件即可
    举例:
    // 新建文件 config/test.php
    <?
    return [
     'url' => env('APP_URL', null),
     'site' => [
             'name' => env('APP_NAME', null)
     ]
    ];
    调用
    config('test.url');
    config('test.site.name');
2年前 评论

laravel已经封装的很好了,即使全写在控制器也没几行代码(我全在控制器里完成)。 :joy:

2年前 评论
chowjiawei

1楼2楼都回答好了 都是标准的答案

2年前 评论

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