本文作者:心月

YII2高级版框架搭建完整博客系统教程——实现文章创建方法

心月IT博客 2019-03-14
YII2高级版框架搭建完整博客系统教程——实现文章创建方法摘要:文章创建create方法的实现:文章创建保存会涉及到多张表,为保证数据的完整性采用事务。

1、文章创建create方法的实现:

/**
 * 创建文章
 * 文章创建保存会涉及到多张表,为保证数据的完整性采用事务
 */
public function create()
{
    //开启事务
    $transaction = Yii::$app->db->beginTransaction();
    try{
        $model = new PostsModel();
        $model -> setAttributes($this->attributes);
        $model -> summary = $this->_getSummary();
        $model -> user_id = Yii::$app->user->identity->id;
        $model -> user_name = Yii::$app->user->identity->username;
        $model -> is_valid = PostsModel::IS_VALID;
        $model -> created_at = time();
        $model -> updated_at = time();

        if (!$model->save())
            throw new Exception('文章保存失败!');

        $this -> id = $model->id;


        //文章创建成功以后调用的事件
        //获取事件数据传递给事件
        $data=array_merge($this->getAttributes(),$model->getAttributes());
        $this -> _eventAfterCreate($data);

        $transaction -> commit();
        return true;
    }catch (Exception $e){
        $transaction->rollBack();
        $this->_lastError = $e -> getMessage();
        return false;
    }

}

文章创建create方法的实现

2、设置文章发布状态常量

const IS_VALID = 1; //发布
const NO_VALID = 0; //未发布

文章发布状态常量设置

3、文章摘要截取方法的实现

/**
 * 截取文章摘要
 * @param int $s 起始位置
 * @param int $e 结束位置
 * @param string $char
 * @return string|null
 */
public function _getSummary($s=0,$e=90,$char='utf-8')
{
    if (empty($this->content))
        return null;

    return (mb_substr(str_replace(' ','',strip_tags($this->content)),$s,$e,$char));
}

文章摘要截取方法的实现

4、定义文章创建成功后的事件常量

const EVENT_AFTER_CREATE = "evenAfterCreate";
const EVENT_AFTER_UPDATE = "evenAfterUpdate";

定义文章创建成功后的事件常量

5、给文章创建后的调用事件绑定事件

/**
 * 文章创建成功后调用事件
 */
public function _eventAfterCreate($data)
{
    //添加绑定事件
    $this->on(self::EVENT_AFTER_CREATE,[$this,'_eventAddTag'],$data);
    //触发事件
    $this->trigger(self::EVENT_AFTER_CREATE);
}

给文章创建后的调用事件绑定事件

文章创建create方法基本实现,更多的细节请看后续教程文章。

到这里可以先创建一篇文章测试下,发布文章后的跳转页面如果是这样的(id后面的参数可以不一样),说明没有问题。

测试创建文章

如提示文章保存失败,请检查下PostsModel中的rules规则,看是否如下图中红色下划线标注的那样,如果是请把'string改成'integer',因为我们设置的is_valid的常量值是整形,不是字符型。

文章保存失败问题检查

如果是其他问题,那就要好好检查代码了。

【提示】为了安全考虑,以及yii2 form表单提交验证机制创建发布文章需要在登录状态下才可以完成,也就是说要登录后才可以发布文章,否则会报错。文章登录验证的具体实现方法可以参考《YII2博客发布文章登录验证设置》这篇文章。

文章版权及转载声明:

本文由 心月IT技术博客 博主整理于 2019-03-14
若转载请注明原文及出处:https://www.xinyueseo.com/yii/185.html

分享到:
赞(
发表评论
快捷输入:

验证码

    评论列表 (有 0 条评论,人围观)参与讨论