以后台admin模块下Admin控制器为例分析其走向流程,学习和借鉴其好的思路和思维逻辑(详细分解防止以后忘记)。。。大佬不用看了,请勿喷!
<?php
namespace app\admin\controller;
use think\Lang;
class Admin extends AdminControl//继承AdminControl控制器
{
public function _initialize()//初始化
{
parent::_initialize();//执行父类方法
//读取语言配置:config('default_lang') 读取config配置文件中default_lang的值 APP_PATH则是入口文件index.php中定义的常量define('APP_PATH', __DIR__ . '/../application/');
Lang::load(APP_PATH . 'admin/lang/' . config('default_lang') . '/admin.lang.php');//application文件夹下admin文件夹下lang文件夹下面
}
/**
* 管理员列表
* @return mixed
*/
public function index()
{
$model_admin = Model('admin');//实例化model类(application文件夹下common文件夹下model文件夹下面)
$condition = array();//条件变量
$admin_list = $model_admin->getAdminList($condition, '*', 5);//执行admin模型类中getAdminList方法 从而返回 $member_list->items()数据和page_info数据
$this->assign('admin_list', $admin_list);
$this->assign('show_page', $model_admin->page_info->render());
//执行基类AdminControl中setAdminCurItem的方法 而该方法又调用了本文件下getAdminItemList方法
$this->setAdminCurItem('index');
//返回 $this->assign('admin_item', $this->getAdminItemList()); $this->assign('curitem', $curitem);
//admin_list 返回给视图页面使用 {volist name="admin_list" id="admin"} {/volist}
//$curitem
//视图页面
// 使用了模板继承{extend name="layout:home" /}---中{$Think.BASE_SITE_ROOT}类似的常量定义在application下的 应用公共(函数)文件common.php定义
//{block name="container"}内容{/block}
//{include file="layout/admin_items" /} 中
//admin_items.html文件中$admin_item来源于AdminControl控制器setAdminCurItem(当前选中的栏目方法)
//$item.name eq $curitem 做对比来实现是否高亮
/* {if $admin_item}
<ul class="layui-tab-title">
{foreach name="admin_item" item="item" }
<li {if condition="$item.name eq $curitem" }class="layui-this" {/if}>
<a href="{$item.url}">{$item.text}</a>
</li>
{/foreach}
<div class="tool-btns">
<a href="javascript:location.reload();" title="刷新当前页面" class="iconfont icon-reload"></i></a>
</div>
</ul>
{/if}*/
//视图页面中 类似{$Think.lang.admin_name} 读取语言变量值是在lang文件夹下面对应的语言文件夹下的admin.lang.php中admin_name的值以此类推
//而里面类似{$Think.lang.ds_no_login}却没有在前者存在的语言变量值,则是由基类AdminControl控制器中_initialize初始化方法中
//Lang::load(APP_PATH . 'admin/lang/' . config('default_lang') . '.php');而引用的
return $this->fetch();
}
/**
* 添加管理员
* @return mixed
*/
public function add()
{
if (request()->isPost()) {
$model_admin = Model('admin');
//判断用户名是否存在
if ($model_admin->getOneAdmin(['admin_name' => input('post.admin_name')])) {
$this->error(lang('admin_existence'));
}
$data = array(
'admin_name' => input('post.admin_name'),
'admin_password' => input('post.admin_password'),
'admin_group_id' => input('post.group_id'),
'admin_add_time' => TIMESTAMP,
);
$admin_validate = validate('admin');
if (!$admin_validate->scene('add')->check($data)){
$this->error($admin_validate->getError());
}
//添加到数据库
$data['admin_password'] = md5(input('post.admin_password'));
$result = $model_admin->addAdmin($data);
if ($result) {
dsLayerOpenSuccess(lang('admin_add_succ'));
} else {
$this->error(lang('admin_add_fail'));
}
} else {
$admin_array = array('add' => 1);
$admin_group = model('admingroup')->getAdminGroupList('group_name,group_id');
$this->assign('admin_group', $admin_group);
$this->assign('admin', $admin_array);
return $this->fetch('form');
}
}
/**
* 编辑管理员
* @return bool
*/
public function edit()
{
$admin_id = input('param.admin_id');
if (empty($admin_id)) {
$this->error(lang('param_error'));
}
$model_admin = Model('admin');
if (!request()->isPost()) {
$condition['admin_id'] = $admin_id;
$admin_array = $model_admin->getOneAdmin($condition);
$admin_array['add'] = 0;
$admin_group = model('admingroup')->getAdminGroupList('group_name,group_id');
$this->assign('admin_group', $admin_group);
$this->assign('admin', $admin_array);
return $this->fetch('form');
} else {
$data = array(
'admin_id' => $admin_id,//带id过去主要让验证器的unique自动识别是否需要判断唯一性
'admin_name' => input('post.admin_name'),
'admin_password' => input('post.admin_password'),
'admin_group_id' => input('post.group_id')
);
$admin_validate = validate('admin');
if (!$admin_validate->scene('edit')->check($data)){
$this->error($admin_validate->getError());
}
//验证数据 END
$data['admin_password'] = md5(input('post.admin_password'));
$result = $model_admin->editAdmin(array('admin_id' => intval($admin_id)), $data);
if ($result) {
dsLayerOpenSuccess(lang('admin_edit_succ'));
} else {
$this->error(lang('admin_edit_fail'));
}
}
}
/**
* 删除管理员
*/
public function del()
{
$admin_id = input('param.admin_id');
if (empty($admin_id)) {
$this->error(lang('param_error'));
}
$result = db('admin')->delete($admin_id);
if ($result) {
ds_json_encode(10000, lang('admin_del_succ'));
} else {
ds_json_encode(10001, lang('admin_del_fail'));
}
}
/**
* 获取栏目列表,针对控制器下的栏目
*/
protected function getAdminItemList()
{
$menu_array = array(
array(
'name' => 'index', 'text' => lang('ds_manage'), 'url' => url('Admin/index')
), array(
'name' => 'add', 'text' => lang('ds_add'), 'url' => "javascript:dsLayerOpen('".url('Admin/add')."','".lang('ds_add')."')"
),
);
return $menu_array;
}
}