laravel实战化项目之三板斧

spring mvc 实战化项目之三板斧

asp.net mvc 实战化项目之三板斧

laravel是我工作10多年来见到的真正能称得上让phper从面条一样杂乱的代码中解脱出来,虽然我不是完全的phper;并真正意义上的一个比较完美优雅的基于面向对象又mvc富有表现力的强大的PHP开发框架。

laravel安装配置这里就略过不表啦。本文希望从一张表(tb_role_info 用户角色表)的CRUD展开laravel的绅士魅力。

开发技术选型:laravel framework5+bootstrap+mysql。

项目目录结构:

喔忘了views视图层,存放表现页面。

(1)业务表 tb_role_info

 -- ----------------------------
-- Table structure for `tb_role_info` 用户角色表
-- ----------------------------
DROP TABLE IF EXISTS `tb_role_info`;
CREATE TABLE `tb_role_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`role_name` varchar(32) NOT NULL DEFAULT '' COMMENT '角色名称',
`role_mark` varchar(255) DEFAULT '' COMMENT '角色备注',
`creater_id` int(11) NOT NULL DEFAULT '' COMMENT '记录创建者id',
`created_at` timestamp NULL DEFAULT NULL COMMENT '创建日期',
`updated_at` timestamp NULL DEFAULT NULL COMMENT '更新日期',
`time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间戳',
PRIMARY KEY (`id`),
KEY `tb_role_info_index` (`id`,`role_name`,`creater_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='角色信息表';

(2)业务界面 role.blade.php

<!DOCTYPE html>
<html>
<head>
@include('backend.header')
<link rel="stylesheet" type="text/css" href="{{asset('backend/plugs/bootstrap-table/src/bootstrap-table.css')}}?v={{$version}}"/>
</head>
<body>
@include('backend.navbar')
<div id="page-container">
<!-- BEGIN SIDEBAR -->
@include('backend.menu')
<!-- END SIDEBAR -->
<!-- BEGIN RIGHTBAR -->
<!-- END RIGHTBAR -->
<div id="page-content">
<div id="wrap">
<div id="page-heading">
<ol class="breadcrumb">
<li><a href="#" title="icons">系统管理</a></li>
<li class="active">角色信息</li>
</ol>
</div>
<!-- container 内容显示区域begin-->
<div class="container">
<div class='data-loading'></div>
<div class="row">
<div class="col-xs-12">
<div id="search_panel" class="search-panel-body">
<form id="search_form" class="form-horizontal">
<div class="row">
<div class="col-md-10">
<div class="form-group">
<label for="search_txt_roleName" class="col-sm-1 control-label">角色名称</label>
<div class="col-sm-11">
<input id="search_txt_roleName" type="text" class="form-control" placeholder="请输入关键字...">
</div>
</div>
</div>
<div class="col-md-2">
<div class="form-group">
<div class="col-sm-8">
<button id="btn_search_save" type="button" class="btn btn-primary"> <i class="fa fa-search"></i> 查询</button>
</div>
<div class="col-sm-4">
<button id="btn_search_expand" type="button" class="btn btn-default"> <i class="fa fa-angle-double-up"></i></button>
</div>
</div>
</div>
</div>
<div class="row" id="search_more_panel" style="display:none;">
</div>
</form>
</div>
<div class="panel panel-gray">
<div class="panel-heading">
<h4>角色信息 </h4>
<div class="options">
<div class="btn-group">
<div class="btn-group" id="table_tools_bar">
<button type="button" class="btn btn-default dropdown-toggle btn-tools" data-toggle="dropdown" title="定制列显示"><i class="fa fa-th-list"></i> <span class="caret"></span></button>
</div>
<button id="btn_role_refresh" type="button" class="btn btn-default btn-tools" title="角色刷新"><i class="fa fa-refresh"></i></button>
</div>
</div>
<div class="options options-groups">
<a href="javascript:;" id="btn_role_delete" title="角色删除"><i class="fa fa-times"></i> 删除</a>
<a data-toggle="modal" href="#form_modal" id="btn_role_edit" title="角色编辑"><i class="fa fa-edit"></i> 编辑</a>
<a data-toggle="modal" href="#form_modal" id="btn_role_add" title="角色添加"><i class="fa fa-pencil"></i> 添加</a>
</div>
</div>
<div class="panel-body"> <div class="table-responsive">
<table id="role_table"></table>
</div>
<!-- add/edit modal-begin -->
<div id="form_modal" class="modal fade md-trigger"
data-modal="md-fade-in-scale-up"
tabindex="-1"
role="dialog"
aria-labelledby="form_modal_title"
data-keyboard="true"
data-backdrop="static"
aria-hidden="true"> <div id="form_modal_dialog" class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">
×</button>
<h4 class="modal-title" id="form_modal_title"></h4>
</div>
<div class="modal-body">
<form id="modalForm" class="form-horizontal" role="form" enctype="multipart/form-data">
<!-- 隐藏值存放区域 begin-->
<input name="id" id="form_hidden_id" type="hidden">
<input name="createrId" id="form_hidden_createrId" type="hidden">
<!-- 隐藏值存放区域 end-->
<div class="form-group">
<label for="form_txt_roleName" class="col-sm-2 control-label">角色名称</label>
<div class="col-sm-7">
<input id="form_txt_roleName" name="roleName" maxlength="32" placeholder="角色名称最多32个字符" required="" type="text" class="form-control">
</div>
<div class="col-sm-3">
<p class="help-block">角色名称必填!</p>
</div>
</div>
<div class="form-group">
<label for="form_txt_roleName" class="col-sm-2 control-label">角色权限</label>
<div class="col-sm-10">
<table id="table_module" class="table table-bordered">
<thead>
<tr>
<th width="2%" style="padding: 10px"> </th>
<th width="28%" style="padding: 10px">
模块
</th>
<th width="30%" style="padding: 10px">
功能
</th>
<th width="30%" style="padding: 10px">
动作
</th>
</tr>
</thead>
@if(isset($moduleList))
<tbody>
@foreach($moduleList as $module)
@if($module->id==1 && $user->userRoleId!=1) @else
<tr>
<td>
<input type="checkbox" id="power_{{$module->id}}" name="mod_{{$module->id}}" value="{{$module->id}}" onclick="checkModule({{$module->id}});" />
</td>
<td>
{{$module->moduleCnName}}
</td>
<td>
<table width="100%">
@if(isset($module->children))
@foreach($module->children as $children)
<tr>
<td width="6%"><input type="checkbox" id="power_{{$children->id}}" name="fun_{{$module->id}}" value="{{$children->id}}" onclick="checkFun({{$module->id}});" /></td>
<td width="94%">{{$children->moduleCnName}}</td>
</tr>
@endforeach
@endif
</table>
</td>
<td>
<table width="100%">
@if(isset($module->children))
@foreach($module->children as $oneChild)
@if(isset($oneChild->children))
@foreach($oneChild->children as $twoChild)
<tr>
<td width="6%"><input type="checkbox" id="power_{{$twoChild->id}}" name="act_{{$children->id}}" value="{{$twoChild->id}}" onclick="checkAction({{$children->id}});"/></td>
<td width="94%">{{$twoChild->moduleCnName}}</td>
</tr>
@endforeach
@endif
@endforeach
@endif
</table>
</td>
</tr>
@endif
@endforeach
</tbody>
@endif
</table>
</div>
</div>
<div class="form-group">
<label for="form_txt_roleMark" class="col-sm-2 control-label">
角色描述</label>
<div class="col-sm-10">
<textarea id="form_txt_roleMark" name="roleMark" maxlength="255" placeholder="角色描述最多255个字符" class="form-control autosize"></textarea>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button id="btn_role_save" type="button" class="btn btn-primary">
确定</button>
<button type="button" class="btn btn-default" data-dismiss="modal">
取消</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal-dialog -->
</div>
<!-- add/edit modal-end --> </div>
</div>
</div>
</div>
</div>
<!-- container 内容显示区域end-->
</div>
<!--wrap -->
</div>
</div>
<!-- page-container -->
<!-- page-content -->
@include('backend.footer')
</body>
</html>
<script type="text/javascript" charset="utf-8" src="{{asset('backend/plugs/bootstrap-table/src/bootstrap-table.js')}}?v={{$version}}"></script>
<script type="text/javascript" charset="utf-8" src="{{asset('backend/plugs/bootstrap-table/src/locale/bootstrap-table-zh-CN.js')}}?v={{$version}}"></script>
<script type="text/javascript" charset="utf-8" src="{{asset('backend/js/sys_role.js')}}?v={{$version}}"></script>

(3)业务界面逻辑 sys_role.js

谁总是说用了jquery会导致你的脚本代码像意大利面条呀。你看像吗?!像也只能说明你功底不够。软件架构设计规划能力太差。

/**
* sys_role
* 角色信息
* @author steven9801@163.com
* @date 2015-11-19
*/
(function ($) {
$(document).ready(function () {
/**
* 初始化
*/
init();
/**
* 新建模态
*/
$('#btn_role_add').click(function () {
addModal()
});
/**
* 编辑模态
*/
$('#btn_role_edit').click(function () {
var rowList = dataGrid.bootstrapTable('getSelections');
var length = rowList.length;
if (length == 0) {
warningBox('请选择编辑对象.');
return false;
}
if (length > 1) {
warningBox('只能编辑一项.');
return false;
}
editModal(rowList[0]);
});
/**
* 保存动作
*/
$('#btn_role_save').click(function () {
switch (dialogType) {
case 'add':
onAdd();
break;
case 'edit':
onEdit();
break;
default:
break;
}
});
/**
* 删除
*/
$('#btn_role_delete').click(function () {
onDelete();
});
//-----------------常规事件----------begin-------//
/**
* 刷新
*/
$('#btn_role_refresh').click(function () {
dataGrid.bootstrapTable('destroy');
loadGrid();
});
/**
* 展开
*/
$('#btn_search_expand').click(function () {
$(this).html('');
searchStatus = searchStatus ? false : true;
if (searchStatus) {
$('#search_more_panel').hide('slow');
$(this).html('<i class="fa fa-angle-double-up"></i>');
}
else {
$('#search_more_panel').show('slow');
$(this).html('<i class="fa fa-angle-double-down"></i>');
}
return false;
});
/**
* 提交查询
*/
$('#btn_search_save').click(function () {
dataGrid.bootstrapTable('destroy');
bindGrid(function (params) {
var roleName = $('#search_txt_roleName').val();
role.pageSize = params.pageSize;
role.pageStart = params.pageSize * (params.pageNumber - 1);
role.sortName = params.sortName;
role.sortOrder = params.sortOrder;
if (roleName.length > 0) {
role.roleName = roleName;
}
return JSON.stringify(role);
});
}); //-----------------常规事件----------end-------//
});
})(jQuery);
/**
* 全局变量
*/
//--------------------------全局变量区---------------------------//
var dataGrid = null; //列表对象
var dialogType = 'add';
var role = {};
var lock = false; //防止重复提交
var searchStatus = false; //查询面板状态
//--------------------------全局变量区---------------------------//
/**
* 初始化
*/
function init() {
loadGrid();
$("#form_modal .modal-body").css({ height: "650px", overflowX: "hidden", overflowY: "auto" });
$('textarea.autosize').autosize({ append: "\n" });
};
/**
*
* 加载列表
*
*/
function loadGrid() {
bindGrid(function (params) {
return JSON.stringify({
pageSize: params.pageSize,
pageStart: params.pageSize * (params.pageNumber - 1),
sortName: params.sortName,
sortOrder: params.sortOrder
});
});
return false;
}; /**
* 绑定列表
*/
function bindGrid(callBack) {
dataGrid = $('#role_table').bootstrapTable({
method: 'POST',
contentType: 'application/json;charset=utf-8',
url: '../admin/role',
height: 500,
striped: true,
pagination: true,
sidePagination: 'server',
pageSize: 25,
pageList: [25, 50, 100, 200],
showExport: true,
sortName: 'createdAt',
sortOrder: 'desc',
minimunCountColumns: 2,
formatLoadingMessage: function () {
return '<img src="../../backend/images/loading.gif"/>';
},
queryParams: callBack,
columns:
[
{ field: 'state', checkbox: true },
{ field: 'roleName', title: '角色名称', align: 'left', valign: 'middle', sortable: true },
{ field: 'createdAt', title: '创建时间', align: 'center', valign: 'middle', sortable: true },
{ field: 'operate', title: '操作', align: 'left', valign: 'middle', sortable: false, formatter: formatOperate, events: operateEvents }
]
});
}; /**
* 格式化操作列
*
*/
function formatOperate(value, row, index) {
var content = [];
content.push(' <a class="view" data-toggle="modal" href="#form_modal" title="角色查看"><i class="fa fa-eye"></i></a>');
content.push(' <a class="edit" data-toggle="modal" href="#form_modal" title="角色编辑"><i class="fa fa-edit"></i></a>');
content.push(' <a class="delete" href="javascript:void(0)" title="角色删除"><i class="fa fa-times"></i></a>');
return content.join('');
}; /**
* 操作列事件
*/
window.operateEvents = {
'click .view': function (e, value, row, index) {
viewModal(row);
return false;
},
'click .edit': function (e, value, row, index) {
editModal(row);
return false;
},
'click .delete': function (e, value, row, index) {
if (lock) return false;
lock = true;
if (userToken.id != row.createrId) {
lock = false;
warningBox('对不起,您无权删除该角色.');
return false;
}
var ids = [];
ids.push(row.id);
var params = {};
params.ids = ids;
deleteModal(params);
}
}; /**
* 显示模态
*/
function showModal(action, title, width) {
dialogType = action;
$('.modal-footer').show();
$('#form_modal #form_modal_title').html(title);
$('#form_modal_dialog').css({ width: width });
$('select,textarea,input').prop('disabled', false);
$('#back-to-top').trigger('click');
return false;
}; /**
* 绑定模态
*/
function bindModal(row) { $('#form_hidden_id').val(row.id);
$('#form_hidden_createrId').val(row.createrId);
$('#form_txt_roleName').val(row.roleName);
$('#form_txt_roleMark').val(row.roleMark); $("input[id^='power_']").removeAttr("checked");
var roleModuleList = row.roleModuleList;
for (var i in roleModuleList) {
var id = roleModuleList[i];
$("input[id='power_" + id + "']").prop("checked", true);
}
}; /**
* 查看模态
*/
function viewModal(row) {
showModal('view', '角色查看', '60%');
bindModal(row);
$('select,textarea,input:not(.fixed-table-container input)').prop('disabled', true);
$('#search_panel select,#search_panel input').prop('disabled', false);
$('#table_tools_bar').find('input').prop('disabled', false);
$('.modal-footer').hide();
return false;
}; /**
* 编辑模态
*/
function editModal(row) {
role = row;
if (userToken.id != row.createrId) {
pauseModal('#form_modal');
warningBox('对不起,您无权编辑该角色.');
return false;
}
showModal('edit', '角色编辑', '60%');
bindModal(row);
return false;
}; /**
* 新建模态
*/
function addModal() {
showModal('add', '角色新建', '60%');
$('input[type=text],input[type=hidden],input[type=number],textarea').val('');
$('select option').eq(0).prop('selected', true);
$("input[id^='power_']").prop('checked', false);
return false;
}; /**
* 验证表单
*/
function checkForm() {
if (lock) return false;
lock = true;
var roleName = $("#form_txt_roleName").val();
if (roleName.length == 0) {
warningBox("角色名称不能为空.");
lock = false;
return false;
} if (roleName.length > 32) {
warningBox("角色名称最多32个字符.");
lock = false;
return false;
} if ($("input[id^='power_']:checkbox:checked").length == 0) {
warningBox("请选择权限.");
lock = false;
return false;
} var roleMark = $("#form_txt_roleMark").val();
if (roleMark.length > 255) {
warningBox("角色描述最多255个字符.");
lock = false;
return false;
} var roleModuleList = [];
$("input[id^='power_']:checkbox:checked").each(function () {
var id = parseInt($(this).val());
roleModuleList.push(id);
}); role.roleName = roleName;
role.roleMark = roleMark;
role.roleModuleList = roleModuleList;
return true;
}; /**
* 角色添加
*/
function onAdd() {
if (!checkForm()) {
return false;
}
$('.data-loading').show();
var task = new DelayedTask(function () {
$.ajax({
cache: false,
type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
url: "../admin/role/add",
data: JSON.stringify(role),
timeout: 30000,
success: function (data) {
if (data) {
$(".data-loading").hide();
var code = data.code;
if (code != 0) {
dangerBox(data.message);
lock = false;
return false;
}
lock = false;
$('#form_modal').modal('hide')
successBox('角色新建成功.');
$('#btn_role_refresh').trigger('click');
}
return false;
},
error: function (e) {
if (e.status == 404) {
window.location = "../../404.html";
}
else if (e.status == 500) {
window.location = "../../500.html";
}
}
});
});
task.delay(500);
return false;
}; /**
* 角色编辑
*/
function onEdit() {
if (!checkForm()) {
return false;
}
$('.data-loading').show();
var task = new DelayedTask(function () {
$.ajax({
cache: false,
type: "POST",
dataType: "json",
contentType: "application/json;charset=utf-8",
url: "../admin/role/edit",
data: JSON.stringify(role),
timeout: 30000,
success: function (data) {
if (data) {
$(".data-loading").hide();
var code = data.code;
if (code != 0) {
dangerBox(data.message);
lock = false;
return false;
} lock = false;
$('#form_modal').modal('hide')
successBox('角色编辑成功.');
$('#btn_role_refresh').trigger('click');
}
return false;
},
error: function (e) {
if (e.status == 404) {
window.location = "../../404.html";
}
else if (e.status == 500) {
window.location = "../../500.html";
}
}
});
});
task.delay(500);
return false;
}; /**
* 角色删除
*/
function onDelete() {
if (lock) return false;
lock = true;
var ids = [];
var rowList = dataGrid.bootstrapTable('getSelections');
var length = rowList.length;
if (length == 0) {
warningBox('请选择删除对象.');
lock = false;
return false;
}
var flag = false;
for (var i in rowList) {
var row = rowList[i];
var createrId = row.createrId;
if (userToken.id != createrId) {
flag = true;
}
var id = row.id;
ids.push(id);
}
if (flag) {
warningBox('对不起,您无权删除该角色.');
lock = false;
return false;
}
var params = {};
params.ids = ids;
deleteModal(ids);
return false;
}; /**
* 删除模态
*/
function deleteModal(ids) {
confirmBox('您确定要删除吗?!', function (result) {
if (result) {
$('.data-loading').show();
$.ajax({
cache: false,
type: 'POST',
dataType: 'json',
contentType: 'application/json;charset=utf-8',
url: '../admin/role/delete',
data: JSON.stringify(ids),
timeout: 30000,
success: function (data) {
if (data) {
$('.data-loading').hide();
var code = data.code;
if (code != 0) {
dangerBox(data.message);
lock = false;
return false;
}
lock = false;
successBox('角色删除成功.');
$('#btn_role_refresh').trigger('click');
}
return false;
},
error: function (e) {
if (e.status == 404) {
window.location = '../../404.html';
}
else if (e.status == 500) {
window.location = '../../500.html';
}
}
});
}
else {
lock = false;
}
});
return false;
}; /**
* 选择模块
*/
function checkModule(moduleId) {
$("input[name='fun_" + moduleId + "']").each(function () {
if ($(this).is(":checked") == true) {
$(this).prop("checked", false)
}
else {
$(this).prop("checked", true);
}
}); };
/**
* 选择功能
*/
function checkFun(moduleId) {
var funLength = $("input[name='fun_" + moduleId + "']:checkbox:checked").length;
if (funLength != 0) {
$("input[name='mod_" + moduleId + "']").prop("checked", true);
}
else {
$("input[name='mod_" + moduleId + "']").prop("checked", false);
}
}; /**
* 选择动作
*/
function checkAction(funId) {
var actLength = $("input[name='act_" + funId + "']:checkbox:checked").length;
if (actLength != 0) {
$("input[id='power_" + funId + "']").prop("checked", true);
}
else {
$("input[id='power_" + funId + "']").prop("checked", false);
} };

(4)业务控制器 RoleController.php

<?php
/**
* This is class RoleController
* 角色控制器
* @author steven9801@163.com
* @date 2015-11-19
*
*/
class RoleController extends BaseController
{
private $roleInfoService = null;
private $userInfoService = null;
private $moduleInfoService = null;
private $roleModuleService = null;
private $transactionalService = null;
public function __construct()
{
if(is_null($this->userInfoService))
{
$this->userInfoService = new UserInfoService;
}
if(is_null($this->roleInfoService))
{
$this->roleInfoService = new RoleInfoService;
}
if(is_null($this->moduleInfoService))
{
$this->moduleInfoService = new ModuleInfoService;
}
if(is_null($this->roleModuleService))
{
$this->roleModuleService = new RoleModuleService;
}
if(is_null($this->transactionalService))
{
$this->transactionalService = new TransactionalService;
}
} /**
* 角色界面
*/
public function index()
{
if (!Auth::check())
{
return Redirect::to('admin/login');
} $moduleList = $this->moduleInfoService->selectModuleInfo();
if(!is_null($moduleList))
{
$moduleList = $this->objectToTree($moduleList);
} return View::make('backend.role',array('sys' => $this->getConfigInfo()))
->with('version',Str::random(6))
->with('roleModuleList',$this->getRoleModuleInfo())
->with('user',Auth::user())
->with('moduleList',$moduleList);
} /**
* 角色列表
*/
public function grid()
{
if (!Auth::check())
{
return Redirect::to('admin/login');
} try
{
$roleInfo = (object)Input::all();
$userInfo = Auth::user(); $sortName = $roleInfo->sortName;
$sortOrder = $roleInfo->sortOrder;
$pageStart = $roleInfo->pageStart;
$pageSize = $roleInfo->pageSize; $where = function($query) use($roleInfo,$userInfo)
{
if(isset($roleInfo->roleName))
{
$query->where('role_name','like','%'.$roleInfo->roleName.'%');
}
}; $total = $this->roleInfoService->getRoleInfoCount($where);
$roleInfoList = $this->roleInfoService->searchRoleInfo($where,$sortName,$sortOrder,$pageStart,$pageSize);
$entityGrid = null;
if(!is_null($roleInfoList)&&$roleInfoList->count()>0)
{
foreach($roleInfoList as $roleModel)
{
$roleId = $roleModel->id;
$where = function($query) use($roleId)
{
$query->where('role_id',$roleId);
};
$roleModuleListModel = $this->roleModuleService->selectRoleModule($where);
if(!is_null($roleModuleListModel))
{
$roleModuleList = array();
foreach($roleModuleListModel as $roleModule)
{
$roleModuleList[] = $roleModule->moduleId;
}
$roleModel->roleModuleList = $roleModuleList;
}
}
$entityGrid = $this->getEntityGrid($roleInfoList,$total);
}
else
{
$entityGrid = $this->getEntityGrid($roleInfoList);
}
$this->handlerResponseMessage($entityGrid);
return $this->handlerResponseMessage($entityGrid);
}
catch(Exception $e)
{
Log::error($e->getMessage());
return $this->handlerFailMessage($e->getMessage());
}
} /**
* 角色新建
*/
public function add()
{
if (!Auth::check())
{
return Redirect::to('admin/login');
} try
{
$roleInfo = (object)Input::all();
$userInfo = Auth::user(); $roleName = $roleInfo->roleName;
$where = function($query) use($roleName)
{
$query->where('role_name',$roleName);
};
$roleInfoModel = $this->roleInfoService->getRoleInfo($where);
if(!is_null($roleInfoModel))
{
throw new Exception('角色名称已存在.');
}
$roleInfo->createrId = $userInfo->id;
$result = $this->transactionalService->insertRoleInfo($roleInfo);
if($result==0)
{
throw new Exception('角色新建失败.');
}
$this->logSuccess();
return $this->handlerSuccessMessage('../admin/role');
}
catch(Exception $e)
{
$this->logFailed();
Log::error($e->getMessage());
return $this->handlerFailMessage($e->getMessage());
}
} /**
* 角色编辑
*/
public function edit()
{
if (!Auth::check())
{
return Redirect::to('admin/login');
} try
{
$roleInfo = (object)Input::all();
$userInfo = Auth::user();
$result = $this->transactionalService->updateRoleInfo($roleInfo);
if($result==0)
{
throw new Exception('角色编辑失败.');
}
$this->logSuccess();
return $this->handlerSuccessMessage('../admin/role');
}
catch(Exception $e)
{
$this->logFailed();
Log::error($e->getMessage());
return $this->handlerFailMessage($e->getMessage());
}
} /**
* 角色删除
*/
public function delete()
{
if (!Auth::check())
{
return Redirect::to('admin/login');
} try
{
$ids = (array)Input::all();
$roleInfoList = $this->roleInfoService->selectRoleInfoByList($ids);
if(is_null($roleInfoList)&&$roleInfoList->count()==0)
{
throw new Exception('角色删除失败.');
}
$result = $this->transactionalService->deleteRoleInfo($roleInfoList);
if($result==0)
{
throw new Exception('角色删除失败.');
}
$this->logSuccess();
return $this->handlerSuccessMessage('../admin/role');
}
catch(Exception $e)
{
$this->logFailed();
Log::error($e->getMessage());
return $this->handlerFailMessage($e->getMessage());
}
}
}

(5)业务实体层 RoleInfo.php

<?php
/**
* This is class RoleInfo
* 角色实体类
* @author steven9801@163.com
* @date 2015-11-19
*/
class RoleInfo extends BaseModel
{
protected $table = 'tb_role_info';
protected $primaryKey = 'id';
protected $softDelete = false; protected $roleModuleList = null;
}

(6)业务数据层 RoleInfoDataProvider.php

<?php
/**
* This is class RoleInfoDataProvider
* 角色数据驱动类
* @author steven9801@163.com
* @date 2015-11-19
*/
class RoleInfoDataProvider extends BaseDataProvider
{
public function __construct()
{
parent::__construct(new RoleInfo);
} public function insertRoleInfo($model)
{
$roleInfo = new RoleInfo;
$roleInfo->roleName = isset($model->roleName)?$model->roleName:'';
$roleInfo->roleMark = isset($model->roleMark)?$model->roleMark:'';
$roleInfo->createrId = isset($model->createrId)?$model->createrId:0;
return $roleInfo->save() ? $roleInfo -> id:0;
} public function updateRoleInfo($model)
{
if(!($model->id))
{
throw new Exception('参数id不能为空.');
}
$roleInfo = RoleInfo::find($model->id);
if(is_null($roleInfo))
{
throw new Exception('[ID='.$model->id. ']不存在或者已被删除.');
}
if(isset($model->roleName))
{
$roleInfo->roleName = $model->roleName;
}
if(isset($model->roleMark))
{
$roleInfo->roleMark = $model->roleMark;
}
if(isset($model->createrId))
{
$roleInfo->createrId = $model->createrId;
}
return $roleInfo->save();
} public function clearRoleInfo()
{
$roleInfoList = RoleInfo::all();
if(is_null($roleInfoList))
{
throw new Exception('记录不存在或者已被删除.');
}
foreach($roleInfoList as $roleInfo)
{
$result = $roleInfo->delete();
if(!$result)
{
break;
}
}
return $result;
} public function deleteRoleInfo($roleInfo)
{
return $roleInfo->delete();
} public function deleteRoleInfoByList($ids)
{
return RoleInfo::whereIn('id', $ids)->delete();
} public function getRoleInfo($where)
{
if(is_null($where))
{
return RoleInfo::first();
}
return RoleInfo::where($where)->first();
} public function getRoleInfoCount($where)
{
if(is_null($where))
{
return RoleInfo::count();
}
return RoleInfo::where($where)->count();
} public function selectRoleInfo($where,$sortName,$sortOrder)
{
if(is_null($where))
{
return RoleInfo::orderBy(snake_case($sortName),$sortOrder)->get();
}
return RoleInfo::where($where)->orderBy(snake_case($sortName),$sortOrder)->get();
} public function selectRoleInfoByList($ids)
{
return RoleInfo::whereIn('id', $ids)->get();
} public function searchRoleInfo($where, $sortName, $sortOrder, $pageStart, $pageSize)
{
if(is_null($where))
{
return RoleInfo::orderBy(snake_case($sortName),$sortOrder)->skip($pageStart)->take($pageSize)->get();
}
return RoleInfo::where($where)->orderBy(snake_case($sortName),$sortOrder)->skip($pageStart)->take($pageSize)->get();
}
}

(7)业务服务层 RoleInfoService.php

<?php
/**
* This is class RoleInfoService
* 角色服务类
* @author steven9801@163.com
* @date 2015-11-19
*/
class RoleInfoService extends BaseService
{
private $roleInfoDataProvider = null; public function __construct()
{
if(is_null($this->roleInfoDataProvider))
{
$this->roleInfoDataProvider = new RoleInfoDataProvider;
}
parent::__construct($this->roleInfoDataProvider);
} public function insertRoleInfo($roleInfo)
{
$result = DB::transaction(function() use ($roleInfo)
{
return $this->roleInfoDataProvider->insertRoleInfo($roleInfo);
});
return $result;
} public function insertRoleInfoBatch($roleInfoList)
{
$result = DB::transaction(function() use ($roleInfoList)
{
$insertedCount = 0;
$changed = 0;
foreach($roleInfoList as $roleInfo)
{
$changed = $this->roleInfoDataProvider->insertRoleInfo($roleInfo);
if ($changed < 1)
{
return 0;
}
$insertedCount++;
}
return $insertedCount;
});
return $result;
} public function updateRoleInfo($roleInfo)
{
$result = DB::transaction(function() use ($roleInfo)
{
return $this->roleInfoDataProvider->updateRoleInfo($roleInfo);
});
return $result;
} public function updateRoleInfoBatch($roleInfoList)
{
$result = DB::transaction(function() use ($roleInfoList)
{
$updatedCount = 0;
$changed = 0;
foreach($roleInfoList as $roleInfo)
{
$changed = $this->roleInfoDataProvider->updateRoleInfo($roleInfo);
if ($changed < 1)
{
return 0;
}
$updatedCount++;
}
return $updatedCount;
});
return $result;
} public function clearRoleInfo()
{
$result = DB::transaction(function() use ($roleInfo)
{
return $this->roleInfoDataProvider->clearRoleInfo();
});
return $result;
} public function deleteRoleInfo($roleInfo)
{
$result = DB::transaction(function() use ($roleInfo)
{
return $this->roleInfoDataProvider->deleteRoleInfo($roleInfo);
});
return $result;
} public function deleteRoleInfoByList($ids)
{
$result = DB::transaction(function() use ($ids)
{
return $this->roleInfoDataProvider->deleteRoleInfoByList($ids);
});
return $result;
} public function deleteRoleInfoBatch($roleInfoList)
{
$result = DB::transaction(function() use ($roleInfoList)
{
$deletedCount = 0;
$changed = 0;
foreach($roleInfoList as $roleInfo)
{
$changed = $this->roleInfoDataProvider->deleteRoleInfo($roleInfo);
if ($changed < 1)
{
return 0;
}
$deletedCount++;
}
return $deletedCount;
});
return $result;
} public function getRoleInfo($where=null)
{
return $this->roleInfoDataProvider->getRoleInfo($where);
} public function getRoleInfoCount($where=null)
{
return $this->roleInfoDataProvider->getRoleInfoCount($where);
} public function selectRoleInfo($where=null,$sortName='id',$sortOrder='desc')
{
return $this->roleInfoDataProvider->selectRoleInfo($where,$sortName,$sortOrder);
} public function selectRoleInfoByList($Ids)
{
return $this->roleInfoDataProvider->selectRoleInfoByList($Ids);
} public function searchRoleInfo($where=null, $sortName='id', $sortOrder='desc', $pageStart=0, $pageSize=25)
{
return $this->roleInfoDataProvider->searchRoleInfo($where, $sortName, $sortOrder, $pageStart, $pageSize);
}
}

就这样简单整个业务表的CRUD结构清晰的完整的呈现在你面前啦。管中窥豹,真正拥有者会如获至宝。

敬请期待下期:
spring mvc 实战化项目之三板斧

asp.net mvc 实战化项目之三板斧

感兴趣的朋友扫下面的二维码给点打赏吧!

laravel实战化项目之三板斧的更多相关文章

  1. spring mvc 实战化项目之三板斧

    laravel实战化项目之三板斧 spring mvc 实战化项目之三板斧 asp.net mvc 实战化项目之三板斧 接上文希望从一张表(tb_role_info 用户角色表)的CRUD展开spri ...

  2. asp.net mvc 实战化项目之三板斧

    laravel实战化项目之三板斧 spring mvc 实战化项目之三板斧 asp.net mvc 实战化项目之三板斧 接上文希望从一张表(tb_role_info 用户角色表)的CRUD展开asp. ...

  3. 仿联想商城laravel实战---1、仿联想商城需求和数据库设计(lavarel如何搭建项目)

    仿联想商城laravel实战---1.仿联想商城需求和数据库设计(lavarel如何搭建项目) 一.总结 一句话总结: composer引入lavarel.配置域名.配置apache 1.项目名 le ...

  4. 仿联想商城laravel实战---3、前端页面搭建(什么情况下需要路由接参数)

    仿联想商城laravel实战---3.前端页面搭建(什么情况下需要路由接参数) 一.总结 一句话总结: 比如访问课程的时候,不同的课程(比如云知梦),比如访问不同的商品,比如访问不同的分类 //商品详 ...

  5. 重磅!阿里P8费心整理Netty实战+指南+项目白皮书PDF,总计1.08G

    前言 Netty是一款用于快速开发高性能的网络应用程序的Java框架.它封装了网络编程的复杂性,使网络编程和Web技术的最新进展能够被比以往更广泛的开发人员接触到. Netty不只是一个接口和类的集合 ...

  6. 实战Java虚拟机之三“G1的新生代GC”

    今天开始实战Java虚拟机之三:“G1的新生代GC”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...

  7. LBPL--基于Asp.net、 quartz.net 快速开发定时服务的插件化项目

    LBPL 这一个基于Asp.net. quartz.net 快速开发定时服务的插件化项目 由于在实际项目开发中需要做定时服务的操作,大体上可以理解为:需要动态化监控定时任务的调度系统. 为了实现快速开 ...

  8. C实战:项目构建Make,Automake,CMake

    C实战:项目构建Make,Automake,CMake 在本系列文章<C实战:强大的程序调试工具GDB>中我们简要学习了流行的调试工具GDB的使用方法.本文继续"C实战" ...

  9. C实战:项目构建Make,Automake,CMake【转】

    转自:https://blog.csdn.net/dc_726/article/details/48978849 版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问 http://blog. ...

随机推荐

  1. oracle获取某个月份的最后一天

    select last_day(to_date('1992-10','yyyy-mm')) from dual; 输出:1992/10/31

  2. network is unreachable 网关PING不通解决办法

    所里有几台机器没有办法ping通网关,但是ping交换机里的其它机器都可以ping通,其它机器ping网关也可以ping通.那么就排出了硬件的故障,主要问题就在问题机器的路由表上了. 看一下路由表 r ...

  3. RF:RF实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性—Jason niu

    %RF:RF实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 load data.mat a = randperm(569); Train = data(a(1:500),:); ...

  4. POJ 2823 Sliding Window​ (模板题)【单调队列】

    <题目链接> <转载于>>> > 题目大意: 给你一段序列和一个长为k的窗口,这个窗口从最左边逐渐向右滑,直到滑到最右边,问你,该窗口在滑动的过程中,最大值和 ...

  5. config-toolkit之config-face

    config-toolkit是当当网开发的开源项目,使用起来非常的方便.对于很多配置都可以写在配置中心中,进行配置数据的获取,这样我们可以不用把很多信息写在了代码里面,例如数据库账号密码等信息. co ...

  6. spring boot默认访问静态资源

    演示spring boot默认可以直接访问静态资源的2种方法: 第一种:在src/main/resources资源目录下创建一个名为"static"的文件夹(该文件夹的名称是规定死 ...

  7. SpringMVC(十五) RequestMapping map模型数据

    控制器中使用map模型数据,传送数据给视图. 控制器参考代码: package com.tiekui.springmvc.handlers; import java.util.Arrays; impo ...

  8. 在Java中,关于.Class()与.getCalss与.getClass().getName()的区别

    ** * Java反射 *所谓反射,可以理解为在运行时期获取对象类型信息的操作. *传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下, *编程人员可以动态获取这些信息,从而编写更加 ...

  9. 自己总结的C#编码规范--6.格式篇

    格式 格式的统一使用可以使代码清晰.美观.方便阅读.为了不影响编码效率,在此只作如下规定: 长度 一个文件最好不要超过500行(除IDE自动生成的类). 一个文件必须只有一个命名空间,严禁将多个命名空 ...

  10. Asp.Net判断文件是否存在

    在上传文件时经常要判断文件夹是否存在,如果存在就上传文件,否则新建文件夹再上传文件 判断语句为 if (System.IO.Directory.Exists(Server.MapPath(" ...