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 方法 }
你所说的通用方法是
指控制器有控制器的通用方法
,模型有模型的通用方法
?如果是这样的话,就应该写在基础控制器中,方便所有同类型的类来调用
举例: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);
}
}
这是两种通用方法的添加方式,还有一种封装,就是 Handler
,Hander
是比 helper
助手函数更为复杂的处理函数,其设计思路也是全局通用。
helper
就像工具箱,需要钳子
、扳手
,自己去拿来用,而 Handler
更像家用电器,比如 洗衣机
、洗碗机
、扫地机器人
,它是作为一个 功能
存在的,我们需要它来为我们完成一些工作。
Handler
的封装是在 App/Handlers
路径,和 Controllers
一样。
举例:
<?php
namespace App/Handlers;
// 这里封装一个 图片上传的 handler
class ImageUploader
{
public function save()
{
...
}
}
调用:
$uploader = new ImageUploader();
$uploader->save($request->file);
很简单,不赘述了。
- 自定义配置信息放在
config
文件夹,文件格式就参考其他同目录下的配置文件即可
举例:
调用// 新建文件 config/test.php <? return [ 'url' => env('APP_URL', null), 'site' => [ 'name' => env('APP_NAME', null) ] ];
config('test.url'); config('test.site.name');
1、业务逻辑代码建议写在Service,这也是符合框架架构。 2、公共方法可以放在自己创建的公共类文件中。比如在app目录下创建Helper文件夹,在里面创建Helper文件专门放置公共方法。 3、laravel框架的配置信息统一放在根目录config文件夹。 建议多阅读laravel手册。
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 方法 }
你所说的通用方法是
指控制器有控制器的通用方法
,模型有模型的通用方法
?如果是这样的话,就应该写在基础控制器中,方便所有同类型的类来调用
举例: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);
}
}
这是两种通用方法的添加方式,还有一种封装,就是 Handler
,Hander
是比 helper
助手函数更为复杂的处理函数,其设计思路也是全局通用。
helper
就像工具箱,需要钳子
、扳手
,自己去拿来用,而 Handler
更像家用电器,比如 洗衣机
、洗碗机
、扫地机器人
,它是作为一个 功能
存在的,我们需要它来为我们完成一些工作。
Handler
的封装是在 App/Handlers
路径,和 Controllers
一样。
举例:
<?php
namespace App/Handlers;
// 这里封装一个 图片上传的 handler
class ImageUploader
{
public function save()
{
...
}
}
调用:
$uploader = new ImageUploader();
$uploader->save($request->file);
很简单,不赘述了。
- 自定义配置信息放在
config
文件夹,文件格式就参考其他同目录下的配置文件即可
举例:
调用// 新建文件 config/test.php <? return [ 'url' => env('APP_URL', null), 'site' => [ 'name' => env('APP_NAME', null) ] ];
config('test.url'); config('test.site.name');
推荐文章: