一、模型验证

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 方法引用数据