高阶篇

目录

通过对前两篇的学习,大家应该学会怎样创建一个简单得单表操作模型了!接下来,本文将为大家讲解更加高级的操作。

CURD

在开始高阶说明前,大家必须了解《GPPD》,否则会对本文一头雾水。模型管理,对于单表操作提供了如下请求类型:

请求类型名称
GET

index —— 列表页

action —— 新增/编辑页

POSTaction —— 写入数据
PUT

action —— 更新数据

listsort —— 列表内容排序 

DELETEaction—— 删除数据

上面提及的请求类型,已经囊括了CURD。具体实现的方式,请查阅对应目录的Content.class.php文件。

定制模板

开始之前,需要先复习一下《调用模板》、《创建模板

有些时候我们需要对特定的模型显示特定的模板,如:某些表单我想隐藏,尽管我可以通过字段管理隐藏,但隐藏后数据会被覆写。这时候,需要用上定制模板功能了。下面示例用PESCMS TEAM(下称TEAM)中的用户编辑 模板来说明。

先来看看TEAM中的用户模型字段:

blob.png

显然,在新增/编辑中,密码的值应该在表单输入框中处于留空状态。若调用默认的Content_action.php,在编辑下,处理过得密文将会留在输入框中。要避免这个问题,需要定制模板。

我们先在对应的主题目录下创建一个 User 目录。接着再创建一个 User_action.php 文件。我们访问 新增/编辑页,会出现一个空白页。这样就表示系统已经成功读取了模板文件。接下来在文件添加如下代码:

<?php include THEME_PATH . '/Content/Content_action_header.php' ?>
<?php include THEME_PATH . '/Content/Content_action_hidden.php' ?>
<?php include THEME_PATH . '/Content/Content_action_form.php' ?>
<script>
    $(function(){
        $("input[name=password]").val('');
    })
</script>
<?php include THEME_PATH . '/Content/Content_action_footer.php' ?>

我们在随机进入一个账号的编辑页,可以明确看到,密码编辑框的文本已经被留空了。


上面仅仅列出一个比较简单得例子,还有更多复杂的,但由于篇幅以及不同需求情景下,很难一一说清,因此各位请自行举一反三,或者通过阅读PESCMS系列软件源码获取对应的设计思路。

其次,官方建议各位阅读 Content_index.php和Content_action.php两个文件。而在定制列表中,可以直接输出循环遍历变量 $list的内容,因为定制列表中,基本不需要用到动态字段输出的方式,尽量减少复杂度。

继承控制器

除了可以定制模板外,我们还可以继承控制器。经过几次调整,现在版本的PESCMS智能表单类基本满足了日常的使用。下面将用几个实例为大家讲解。


用户模型添加查看用户信息页。

根据CURD表格中的方法可知,模型中并没有查看用户信息页的方法。若按照平常的开发模式,我们会在GET请求目录中创建User.class.php控制器。然后代码如下:

<?php
namespace App\Team\GET;

class User extends \Core\Controller\Controller {
    
    public function view(){
        //...查看用户信息的业务代码
    }
}

若这么干,我们就破坏掉了智能表单中CURD GET方法的 index和action方法。现在访问上述两个方法,系统会报错,提示方法不存在。因此,我们要调整一下继承的策略:

class User extends \Core\Controller\Controller {

改为:

class User extends Content {

完整的示例代码:

<?php
namespace App\Team\GET;

class User extends Content {
    
    public function view(){
        //...查看用户信息的业务代码
    }
}

现在在访问 index和action方法,发现熟悉的界面回来了,然后访问view方法,也正常!

因此,只要您当前的方法是基础模型创建而来的,那么控制器都建议继承Content类。

列表页添加筛选条件以及显示特定模板

由于智能表单是基础单表操作,默认的列表是会输出所有的内容。有时候列表页我们需要添加一下筛选条件,这时候我们需要进行一些继承操作。

首先呢,GET\Content.class.php提供了一些比较使用的属性声明。

$this->condition //用于组合SQL筛选条件
$this->param     //结合SQL筛选条件中的参数绑定。具体请参考《预处理和安全》
<?php

namespache App\Team\GET;


clasee User extends Content {

    /**
     * $display 为false,则不调用默认的模板,用户手动指定模板;即不调用User_index.php。
     */
    public function index($display = false){
       //示例代码
       $this->condition .= ' AND user_id >1 AND user_group = :user_group';//组合筛选条件
       $this->param['user_group'] = $this->g('group'); //绑定的参数, 此处不能声明为 $this->param = ['user_group' => $this->g('group') ]; 。因为这会覆盖在这代码前的数组内容。
       
       parent::index($display);
       
       $this->display('user_test');//调用用户指定的模板
    }

}

通过上面的代码,现在index的方法执行了指定的筛选条件以及显示指定的模板。需要注意的是:parent::index($display);为非必要。如果您需要保留原有的核心方式,则在方法中保留,反之移除。


对于其他请求以及方法的定制、修改模式基本都一样,在这里官方不在详细介绍了。

总结

其实智能表单的内容不多,设计的核心是减少重复代码的编写。也许有不少地方设计不合理,但我们觉得目前这些不足都是有很简单得解决方案。我们相信大家在二次开发过程,基于智能表单的设计,将会减少很多重复的代码。同时,该功能也在不断完善,也许未来有一天会变得真正的智能化(自动产生代码)。

PESCMS DOC 文档系统
© Copyright 2015-2020. by the PESCMS DOC
耗时0.0203秒