一、模型验证
1.前端表单验证:
应用->后台->模块->add.html/edit.html
application -> admin -> ceshi -> add.html
data-rule="required"
<label class="control-label col-xs-12 col-sm-2">{:__('Tfloat')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-Tfloat" data-rule="required" class="form-control" name="row[Tfloat]" type="number" value="0">
</div>
2.后端表单验证
在FastAdmin中默认的add/edit
方法可以使用模型验证,验证器位于application/admin/validate/模型名.php
中,模型验证默认是关闭的状态,如果需要启用,我们需要在当前控制器定义以下属性
protected $modelValidate = true; //是否开启Validate验证,默认是false关闭状态
protected $modelSceneValidate = true; //是否开启模型场景验证,默认是false关闭状态
当开启模型验证后,我们的添加和修改操作都会首先进行模型验证,验证不通过将会抛出错误信息,具体的模型验证规则可以参考TP5官方文档的模型验证规则:https://www.kancloud.cn/manual/thinkphp5/129355
场景验证可以参考TP5场景验证章节:https://www.kancloud.cn/manual/thinkphp5/129322
示例如下:
/**
* 验证规则
*/
protected $rule = [
"ceshiint" => "require",
"ceshidatetime" => "require",
];
/**
* 提示消息
*/
protected $message = [
"ceshiint.require" => "ceshiint 为必填项",
"ceshidatetime.require" => "ceshidatetime 为必填项"
];
/**
* 验证场景
*/
protected $scene = [
'add' => ["ceshiint","ceshidatetime"],
'edit' => ["ceshiint"],
];
二、视图渲染
基类app\common\controller\Backend
会默认渲染以下几个对象到视图中
//渲染站点配置
$this->assign('site', $site);
//渲染配置信息
$this->assign('config', $config);
//渲染权限对象
$this->assign('auth', $this->auth);
//渲染管理员对象
$this->assign('admin', Session::get('admin'));
我们可以在视图中使用{$site.name}
、{$config.modulename}
、{$auth.id}
、{$admin.username}
来获取我们所需要的数据
$site所支持的数据对应为application/extra/site.php
$config所支持的数据为
'site' => $site中的'name', 'cdnurl', 'version', 'timezone', 'languages'字段,
'upload' => application/extra/upload.php中数据,
'modulename' => 'admin',
'controllername' => 控制器名,
'actionname' => 方法名,
'jsname' => 控制器JS所加载的路径,
'moduleurl' => 后台module的链接,
'language' => 当前语言,
'fastadmin' => application/config.php中fastadmin的配置
$auth是一个对象,所对应的类是application/admin/library/Auth.php
$admin是一个当前管理员登录的session数据,存储有管理员的用户名、昵称、ID、头像等信息
如果我们需要在JS中使用以上数据,则使用
Config.site.name
Config.modulename
来获取相关的配置信息
重点:
如果我们需要自己在控制器中透传数据到JS中去,则可以使用控制器的assignconfig
方法来透传,使用如下
$this->assignconfig('demo', ['name'=>'名称']);
然后我们就可以在JS中使用
Config.demo.name
来获取对应的数据
例1:控制器ceshi.php中,新加渲染对象,然后在视图中获取
控制器的初始化方法中,添加如下代码:
$this->assign('ceshi123', "cs123456");
public function _initialize()
{
parent::_initialize();
$this->model = new \app\admin\model\Ceshi;
$this->view->assign("ceshienumList", $this->model->getCeshienumList());
$this->view->assign("ceshisetList", $this->model->getCeshisetList());
$this->view->assign("statusList", $this->model->getStatusList());
$this->assign('ceshi123', "cs123456");
}
在视图index.html中,通过以下方式,引用数据:
{$ceshi123}
<div class="panel panel-default panel-intro">
<div class="panel-heading">
{:build_heading(null,FALSE)}
{$ceshi123}
<ul class="nav nav-tabs" data-field="status">
<li class="{:$Think.get.status === null ? 'active' : ''}"><a href="#t-all" data-value="" data-toggle="tab">{:__('All')}</a></li>
{foreach name="statusList" item="vo"}
<li class="{:$Think.get.status === (string)$key ? 'active' : ''}"><a href="#t-{$key}" data-value="{$key}" data-toggle="tab">{$vo}</a></li>
{/foreach}
</ul>
</div>
例2:在控制器中,使用assignconfig方法来透传数据,然后使用js引用数据,方法如下:
在ceshi.php控制器中:
$this->assignconfig('demo', ['usertoken'=>$this->auth->token,'userid'=>$this->auth->id]);
在js中,使用 Config.demo 方法引用数据