Ai
1 Star 0 Fork 0

Saopig/imi-admin-doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
service.html 14.21 KB
一键复制 编辑 原始数据 按行查看 历史
Saopig 提交于 2022-03-27 14:05 +08:00 . imi-admin
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>服务层 - imi-admin 开发文档 - mddoc</title>
<!-- jQuery-->
<script src="statics/plugin/jquery/jquery-1.12.0.min.js"></script>
<!-- layui -->
<link rel="stylesheet" href="statics/plugin/layui/css/layui.css" />
<script src="statics/plugin/layui/layui.all.js"></script>
<!-- zTree -->
<link rel="stylesheet" href="statics/plugin/zTree/css/zTreeStyle/zTreeStyle.css" />
<script src="statics/plugin/zTree/js/jquery.ztree.core.js"></script>
<!-- SyntaxHighlighter -->
<script src="statics/plugin/SyntaxHighlighter/shCore.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="statics/plugin/SyntaxHighlighter/shCoreDefault.css"/>
<!-- 自定义 -->
<link rel="stylesheet" href="statics/css/style.css" />
<script src="statics/js/home.js"></script>
<link rel="stylesheet" href="statics/css/docView.css" />
<script src="statics/js/docView.js"></script>
</head>
<body>
<!-- top-begin -->
<div id="navbar">
<ul class="layui-nav" lay-filter="">
<div class="navRight">
<li class="layui-nav-item" lay-unselect>
<a id="btn-about" href="javascript:;">关于</a>
</li>
</div>
</ul>
<div class="nav-menu">
<a href="" class="logo">imi-admin 开发文档</a>
<a href="javascript:;" id="navMenuLeft"><i class="layui-icon">&#xe658;</i></a>
<a href="javascript:;" id="navMenuRight"><i class="layui-icon">&#xe61a;</i></a>
</div>
<div class="clear"></div>
</div>
<script>
function openMenuLeft()
{
$('#leftbar').addClass('show-item');
$('#navMenuLeft').addClass('active');
}
function closeMenuLeft()
{
$('#leftbar').removeClass('show-item');
$('#navMenuLeft').removeClass('active');
}
$('#navMenuLeft').click(function(){
var isShow = $('#leftbar').hasClass('show-item');
if(isShow)
{
closeMenuLeft();
}
else
{
closeMenuRight();
openMenuLeft();
}
});
function openMenuRight()
{
$('#navbar > .layui-nav').addClass('show-item')
$('#navMenuRight').addClass('active').find('i').html('&#xe619;');
}
function closeMenuRight()
{
$('#navbar > .layui-nav').removeClass('show-item')
$('#navMenuRight').removeClass('active').find('i').html('&#xe61a;');
}
$('#navMenuRight').click(function(){
var isShow = $('#navbar > .layui-nav').hasClass('show-item');
if(isShow)
{
closeMenuRight();
}
else
{
closeMenuLeft();
openMenuRight();
}
});
</script>
<!-- top-end -->
<!-- left-begin -->
<div id="leftbar" class="layui-nav-side">
<div class="layui-tab layui-tab-brief" style="margin-top:0">
<ul class="layui-tab-title">
<li class="layui-this"><i class="layui-icon">&#xe705;</i> 目录</li>
<li><i class="layui-icon">&#xe615;</i> 搜索</li>
</ul>
<div class="layui-tab-content" style="padding:0;overflow-y: auto;position: relative;padding-top: 12px;box-sizing: border-box;">
<div class="layui-tab-item layui-show">
<ul id="treeDirectory" class="ztree showIcon"></ul>
</div>
<div class="layui-tab-item">
<div class="searchBox">
<div id="searchForm">
<div class="inputBox">
<input type="text" id="search-keyword" name="keyword" placeholder="搜索关键词" class="layui-input"/>
<i class="layui-icon input-icon">&#xe615;</i>
</div>
</div>
<ul id="treeSearch" class="ztree">
</ul>
<div class="searchResultNone">
<i class="layui-icon">&#xe615;</i>
<p>未搜索到结果</p>
</div>
</div>
</div>
</div>
<div class="copyright noScroll">mddoc</div>
</div>
</div>
<script id="searchListTemplate" type="text/html">
{{# layui.each(d, function(index, item){ }}
<li>
<a href="{{ item.url }}"><span>{{ item.title }}</span></a>
</li>
{{# }) }}
</script>
<!-- left-end -->
<div id="body">
<div id="content_body" name="content_body" style="width:100%;height:100%;border:none;overflow: auto;">
<div id="article-content" class="markdown-body">
<script>
function parseCatalogItem(item)
{
item.url = new Array(0 + 1).join('../') + item.url;
return item;
}
document.title = '服务层 - imi-admin 开发文档 - mddoc';
var currentCatalog = parseCatalogItem({"id":8,"parent_id":5,"title":"\u670d\u52a1\u5c42","pageTitle":"\u670d\u52a1\u5c42","mdFileName":"service.md","url":"service.html","level":1,"children":[],"parent":{"id":5,"parent_id":0,"title":"\u540e\u7aef","pageTitle":"\u63a7\u5236\u5668","mdFileName":"controller.md","url":"controller.html","level":0,"children":[{"id":6,"parent_id":5,"title":"\u63a7\u5236\u5668","pageTitle":"\u63a7\u5236\u5668","mdFileName":"controller.md","url":"controller.html","level":1,"children":[]},{"id":7,"parent_id":5,"title":"\u6a21\u578b","pageTitle":"\u6a21\u578b","mdFileName":"model.md","url":"model.html","level":1,"children":[]},{"id":8,"parent_id":5,"title":"\u670d\u52a1\u5c42","pageTitle":"\u670d\u52a1\u5c42","mdFileName":"service.md","url":"service.html","level":1,"children":[]},{"id":9,"parent_id":5,"title":"\u5185\u7f6e\u51fd\u6570","pageTitle":"\u5185\u7f6e\u51fd\u6570","mdFileName":"functions.md","url":"functions.html","level":1,"children":[]},{"id":10,"parent_id":5,"title":"\u5185\u7f6e\u7c7b\u5e93","pageTitle":"\u5185\u7f6e\u7c7b\u5e93","mdFileName":"classs.md","url":"classs.html","level":1,"children":[]}]}});
var catalogList = [{"id":1,"parent_id":0,"title":"\u5e8f\u8a00","pageTitle":"\u5e8f\u8a00","mdFileName":"index.md","url":"index.html","level":0},{"id":2,"parent_id":0,"title":"\u5b89\u88c5","pageTitle":"\u5b89\u88c5","mdFileName":"install.md","url":"install.html","level":0},{"id":3,"parent_id":0,"title":"\u4e0a\u7ebf","pageTitle":"\u4e0a\u7ebf\u5e2e\u52a9","mdFileName":"online.md","url":"online.html","level":0},{"id":4,"parent_id":0,"title":"\u7ec4\u4ef6","pageTitle":"\u7ec4\u4ef6","mdFileName":"wig.md","url":"wig.html","level":0},{"id":5,"parent_id":0,"title":"\u540e\u7aef","pageTitle":"\u63a7\u5236\u5668","mdFileName":"controller.md","url":"controller.html","level":0},{"id":6,"parent_id":5,"title":"\u63a7\u5236\u5668","pageTitle":"\u63a7\u5236\u5668","mdFileName":"controller.md","url":"controller.html","level":1},{"id":7,"parent_id":5,"title":"\u6a21\u578b","pageTitle":"\u6a21\u578b","mdFileName":"model.md","url":"model.html","level":1},{"id":8,"parent_id":5,"title":"\u670d\u52a1\u5c42","pageTitle":"\u670d\u52a1\u5c42","mdFileName":"service.md","url":"service.html","level":1},{"id":9,"parent_id":5,"title":"\u5185\u7f6e\u51fd\u6570","pageTitle":"\u5185\u7f6e\u51fd\u6570","mdFileName":"functions.md","url":"functions.html","level":1},{"id":10,"parent_id":5,"title":"\u5185\u7f6e\u7c7b\u5e93","pageTitle":"\u5185\u7f6e\u7c7b\u5e93","mdFileName":"classs.md","url":"classs.html","level":1},{"id":11,"parent_id":0,"title":"\u524d\u7aef","pageTitle":"\u524d\u7aef","mdFileName":"vue.md","url":"vue.html","level":0}];
for(var i = 0; i < catalogList.length; ++i)
{
if(void 0 !== catalogList[i].url)
{
catalogList[i] = parseCatalogItem(catalogList[i]);
}
}
initTree(catalogList);
</script>
<h1 id="服务层"><a href="#服务层">服务层</a></h1><h2 id="Service定义"><a href="#Service定义">Service定义</a></h2><pre><code>&lt;?php
declare(strict_types=1);
namespace ImiApp\ApiServer\Backend\Service;
use Imi\Bean\Annotation\Inherit;
use ImiApp\ApiServer\Backend\Model\Test;
use ImiApp\ImiServer\AbstractService;
use Imi\Bean\Annotation\Bean;
/**
* @Inherit
* @Bean(&quot;TestService&quot;)
*/
class TestService extends AbstractService
{
/**
* @var string
*/
public $model = Test::class;
public function lists(){
if(这是测试){
$this-&gt;setError('我错了');
return fasle;
}
return $this-&gt;model::query()-&gt;select()-&gt;getArray();
}
}</code></pre><h2 id="控制器中使用"><a href="#控制器中使用">控制器中使用</a></h2><pre><code>&lt;?php
declare(strict_types=1);
namespace ImiApp\ApiServer\Backend\Controller;
use Imi\Server\Http\Route\Annotation\Controller;
use Imi\Aop\Annotation\Inject;
/**
* @Controller(&quot;/Test/&quot;)
*/
class TestController extends CommonController
{
/**
* @Inject(&quot;TestService&quot;)
*/
protected $service;
public function getData(){
$data = $this-&gt;service-&gt;lists();
if($data){
return $this-&gt;response-&gt;success('ok',$this-&gt;service-&gt;lists());
}else{
return $this-&gt;response-&gt;error('no',$this-&gt;service-&gt;getError());
}
}
}</code></pre><h2 id="服务层说明"><a href="#服务层说明">服务层说明</a></h2><p>设计为配合生成curd与curd规范,代码生成会自动生成服务层文件</p><p>当然如果你不想使用service层,直接控制器里写也可以(我也经常这么干)</p><p>服务层内置<code>ImiApp\ImiServer\Request</code>请求类,请求可以看控制器一节<br>可以使用<code>$this-&gt;request</code>调用,也加入了setError和getError方法</p><p>配合curd,内置了curd的所有方法以及高级搜索,模型关联查询,拖拽排序,快捷开关字段方法</p><h2 id="基类方法列表"><a href="#基类方法列表">基类方法列表</a></h2><pre><code>/**
* 读取
* @param bool $isPage
* @return mixed
*/
public function read(bool $isPage = true)
/**
* 拖拽排序
* @param $data
* @return bool
* @throws \Imi\Db\Exception\DbException
*/
public function draggable($data): bool
/**
* 创建
* @param $data
* @return mixed
* @throws \Imi\Db\Exception\DbException
*/
public function create($data)
/**
* 编辑
* @param $data
* @return mixed
* @throws \Imi\Db\Exception\DbException
*/
public function update($data)
/**
* 删除
* @param mixed|null $ids
* @return mixed
* @throws \Imi\Db\Exception\DbException
*/
public function delete($ids = null)
/**
* 获取where后查询器
* @param string|null $filter
* @param string|null $search
* @return mixed
*/
public function where(?string $filter = null, ?string $search = null)
/**
* 快捷操作
* @return mixed
*/
public function operate()</code></pre><p>例如:在控制器中可以直接<code>$this-&gt;service-&gt;create(['a'=&gt;1])</code>等来实现curd</p><p>基类实现了基础需求的curd,所以生成的服务层类里是没有任何方法的</p><p>大部分示例在基础功能都包含了,例如拖拽排序可以参考<code>系统配置</code>页内的分组设置</p><p>快捷操作与高级搜索可以参考<code>用户列表</code>页的状态开关,更多请使用<code>代码生成</code>生成几个复杂的(例如模型关联)页面试试吧</p><h2 id="CURD的前后置方法(Service层内)"><a href="#CURD的前后置方法(Service层内)">CURD的前后置方法(Service层内)</a></h2><pre><code> // read的前置方法
protected function _before_read(&amp;$query){
// 传来的是设置过搜索参数的模型示例,你可以继续进行追加模型方法
$query-&gt;where('x','=',1)-&gt;order('x','desc');
}
// read的后置方法
protected function _after_read(&amp;$data){
// $data为返回给前端的数据,如果read方法设置了isPage=false不分页,则currentPage=1,pageSize=total
// array { list=&gt;[] ,total=&gt;总条数, pageSize=&gt;当前条数, currentPage=&gt;总页数}
foreach($data['list'] as &amp;$v){
$v = $v-&gt;toArray();
$v['追加数据'] = 1;
}
}
// create的前置方法
protected function _before_create(&amp;$data){
// $data 为request请求内容
if($data['pid']){
$data['children'] = '{}';
}
}
// create的后置方法
protected function _after_create($key,$create){
// $key = 创建后主键值,正常场景就是自增的id值
// $create是Model-&gt;insert后的模型实例
}
// update的前置方法(与create同理一样)
protected function _before_update(&amp;$data)
// update的后置方法(与create同理一样)
protected function _after_update(&amp;$data)
// delete的前置
protected function _before_delete(&amp;$ids){
// $ids应为数组,都是主键值
}
// delete的后置
protected function _after_delete(&amp;$ids){
// $ids应为数组,都是主键值
}
</code></pre><h2 id="示例代码"><a href="#示例代码">示例代码</a></h2><pre><code>&lt;?php
declare(strict_types=1);
namespace ImiApp\ApiServer\Backend\Service;
use Imi\Bean\Annotation\Inherit;
use ImiApp\ApiServer\Backend\Model\Test;
use ImiApp\ImiServer\AbstractService;
use Imi\Bean\Annotation\Bean;
use ImiApp\ImiServer\Exception\ServiceException;
/**
* @Inherit
* @Bean(&quot;TestService&quot;)
*/
class TestService extends AbstractService
{
/**
* @var string
*/
public $model = Test::class;
// 执行 添加创建 操作前会执行
protected function _before_create(&amp;$data){
if($data['pid']){
$data['children'] = '{}';
}
}
// 基类服务层收集了ImiApp\ImiServer\Exception\ServiceException异常类
// 如想拦截取消操作可以使用该异常类
protected function _before_create(&amp;$data){
if(!$data['pid']){
throw new ServiceException('PID不存在');
}
}
}</code></pre> </div>
</div>
</div>
<script>
$(function(){
var leftBarTimeout = null;
$('#leftbar').hover(function(e){
if(null !== leftBarTimeout)
{
clearTimeout(leftBarTimeout);
leftBarTimeout = null;
}
if(e.type === 'mouseenter')
{
$('.left-show-hide').fadeIn(250);
}
else if($('#leftbar').css('left') == '0px')
{
$('.left-show-hide').fadeOut(500);
}
});
});
function showLeftbar()
{
$('#leftbar').css('left', 0);
$('#body').css('padding-left','');
$('.left-show-hide > i.layui-icon').html('&#xe603;');
}
function hideLeftbar()
{
$('#leftbar').css('left', '-240px');
$('#body').css('padding-left',0);
$('.left-show-hide > i.layui-icon').html('&#xe602;');
$('.left-show-hide').fadeIn(250);
}
$('.left-show-hide').click(function(){
if($('#leftbar').css('left') == '0px')
{
hideLeftbar();
}
else
{
showLeftbar();
}
})
</script>
<script src="statics/js/mddoc-search.js"></script>
</body>
</html>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/phpben/imi-admin-doc.git
git@gitee.com:phpben/imi-admin-doc.git
phpben
imi-admin-doc
imi-admin-doc
master

搜索帮助