方法名:使用单个单词,禁止多单词、禁止下横线、禁止重复业务核心词
多单词拆分Controller
一、Code代码样例
<?php
namespace App\Module\Cms\Controller;
use Swork\Server\Http\Argument;
use .....
/**
* @Controller("/cms/info")
*/
class LevelController extends BeanCollector
{
/**
* @Inject()
* @var LevelLogic
*/
private $levelLogic;
/**
* 获取翻页
* @param Argument $argument
* @return array
*/
public function pager(Argument $argument)
{
return $list;
}
/**
* 获取列表
* @param Argument $argument
* @return array
*/
public function list(Argument $argument)
{
return $list;
}
/**
* 获取信息(注:通常用于展示用,如果展示和修改可以共用,则使用此方法)
* @param Argument $argument
* @return array
* @throws
*/
public function info(Argument $argument)
{
return $info;
}
/**
* 获取信息(注:通常用于表单修改用)
* @param Argument $argument
* @return array
* @throws
*/
public function detail(Argument $argument)
{
return $info;
}
/**
* 保存级别
* @param Argument $argument
* @return string
* @throws
*/
public function save(Argument $argument)
{
return 'success';
}
/**
* 创建级别
* @param Argument $argument
* @return string
* @throws
*/
public function create(Argument $argument)
{
return 'success';
}
/**
* 修改级别
* @param Argument $argument
* @return string
* @throws
*/
public function modify(Argument $argument)
{
return 'success';
}
/**
* 删除级别
* @param Argument $argument
* @return string
* @throws
*/
public function delete(Argument $argument)
{
return 'success';
}
}
二、解析说明
- 每个小功能对应一个Controller文件,类名为:xxxController (红色为具体业务或表的关键词,蓝色固定为Controller)。
- 统一继承 BeanCollector,用于实现注解。
- 业务核心名称与通常与对应表的核心名一致,如 cms_info —> InfoController
- 类名使用大驼峰,方法名使用小驼峰,类内变量使用小驼峰(不区分全局还是私有),禁止使用下线。 | 项目 | 方式 | | —- | —- | | Class - 类名 | 大驼峰 | | Method - 方法名 | 小驼峰 | | 类内变量 | 小驼峰 |
- 标准功能的方法名 | 方法名 | 说明 | 对应逻辑层方法 | | —- | —- | —- | | pager | 获取翻页数据,返回List和Pager数据 | getPager | | list | 获取一页数据 | getList | | info | 获取详情数据 | getInfo | | xxx | 获取XXX数据(具体某个处理后的数据) | getXXX | | save | 保存数据,对应前端新增和修改时一并使用 | save | | create | 纯创建数据的保存操作 | create | | modify | 纯修改原有数据的保存操作 | modify |
注:1)原则上 save, create, modify 除需要把业务数据外,仅需要固定返回 「success」;
2)大部分情况是使用 save 代替 insert 和 modify 操作,在save方法内通过主键区分是否更新数据;
- 所有参数统一为Argument,(Argument $argument),无其它参数。
- 禁止使用方法之上的Controller注解,对路由进行重定向,如下代码,把 /cms/info/modify -> /cms/info/edit ```php <?php namespace App\Module\Cms\Controller;
/**
- @Controller(“/cms/info”)
/
class LevelController extends BeanCollector
{
/*
- 修改资讯内容
- @param Argument $argument
- Controller(“/edit”) — 禁止使用
- @return string
- @throws */ public function modify(Argument $argument) { return ‘success’; } } ```
- d
三、错误方法命名
- levelPager —- 控制层不带get开头
- levelList
- levelInfo
- updateLevel 或 levelUpdate
- deleteLevel 或 levelDelete
- delete_level 或 level_delete
错误例子1 (1:使用多单词描述方法,2:使用Controller二次重定向):
<?php
namespace App\Module\Sup\Controller\Api\V1;
/**
* @Controller("/sup/api/v1/user")
*/
class UserController extends BeanCollector
{
/**
* 转让管理员权限
* @Controller("/transfer/manager") -- 禁止使用
* @param Argument $argument
* @return string
* @throws
*/
public function transferManager(Argument $argument)
{
//code
}
}
总结:
1) 在Controller大类里面已经声明是 Level 这个业务核心名,在此类内的方法,不能再出现此核心名;
2)使用单个单词的形式做为访问方法名,禁止使用多个单词或拼音
四、最佳实践
当单个单词的命名方法不能满足要求,需要使用两个单或以上单词才能满足时,应当新开Controller来实现。
如 updateLevelMap
<?php
namespace App\Module\Qto\Controller\Setting;
/**
* @Controller("/qto/level")
*/
class LevelController extends BeanCollector
{
/**
* 修改级别映射
* @param Argument $argument
* @return string
* @throws
*/
public function modifyLevelMap(Argument $argument)
{
return 'success';
}
}
应该新建 /Qto/Controller/Level/MapController,如:
<?php
namespace App\Module\Qto\Controller\Level;
/**
* @Controller("/qto/level/map")
*/
class MapController extends BeanCollector
{
/**
* 修改级别映射
* @param Argument $argument
* @return string
* @throws
*/
public function modify(Argument $argument)
{
return 'success';
}
}