fedornabilkin/yii2-binds

通过基于全局标识符uid的中介表关联模型和实体

安装: 20

依赖关系: 0

建议者: 0

安全性: 0

星星: 0

观察者: 2

分支: 0

开放问题: 0

类型:yii2-extension

v0.0.1 2018-03-12 20:02 UTC

This package is auto-updated.

Last update: 2024-09-20 19:14:44 UTC


README

通过中介表基于全局uid关联模型和实体。

此扩展需要php 7.0及以上版本。使用模块yii2-tree-managerSAR (simple ajax requests)

安装

使用composer安装扩展。

php composer.phar require --prefer-dist fedornabilkin/yii2-binds "*"

或者在composer.json文件的require部分添加。

"fedornabilkin/yii2-binds": "dev-master"

执行迁移

php yii migrate --migrationPath=@fedornabilkin/binds/migrations

管理目录/binds/catalog

使用示例

模型

use fedornabilkin\binds\behaviors\BindBehavior;
use fedornabilkin\binds\behaviors\SeoBehavior;
use fedornabilkin\binds\models\base\BindModel;

class Post extends BindModel
{

    public function behaviors()
    {
        return array_merge_recursive(parent::behaviors(), [
            'SeoBehavior' => [
                'class' => SeoBehavior::class,
            ],
            'BindsBehavior' => [
                'class' => BindBehavior::class,
                'tree' => [
                    // никнэймы корневых узлов дерева каталога
                    'nicknames' => [
                        'visible' => [
                            'multiple' => false, // единичный или множественный выбор
                        ],
                        'categories' => [
                            'multiple' => false,
                        ],
                        'tags' => [
                            'multiple' => true,
                            'asDropdown' => false, // развернутое состояние
                        ],
                    ],
                ],
            ],
        ]);
    }

    /**
     * tableName()
     * rules()
     * attributeLabels()
     * ...
     */
     

    /**
     * модели hasOne, указать для удаления дочерней модели
     * если она связана с родительской один-к-одному
     * 
     * Один комментарий может быть привязан только к одной модели Post
     */
    public function getChildModels()
    {
        return array_merge(parent::getChildModels(), [
            Comment::tableName() => Comment::class,
        ]);
    }
    
    /**
     * @return ActiveQuery
     */
    public function getComments()
    {
        return $this->hasOne(Comment::class, ['uid_content' => 'uid']);
    }
}

数据填充表单

<?php
use fedornabilkin\binds\models\Catalog;
use fedornabilkin\binds\models\Uid;
use yii\helpers\Html;
use kartik\tree\TreeViewInput;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model frontend\models\Post */

?>
<div class="post-update">

    <?php $form = ActiveForm::begin(); ?>
    <div class="row">
        <div class="col-xs-12 col-sm-8">

            <?= \fedornabilkin\binds\widgets\status\StatusWidget::widget(['model' => $model])?>

            <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>

            <?= $form->field($model, 'post')->textarea(['rows' => 6]) ?>

            <div class="form-group">
                <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
            </div>

            <?= \fedornabilkin\binds\widgets\seo\SeoWidget::widget(['model' => $model])?>
        </div>

        <div class="col-xs-12 col-sm-4">
            <?= \fedornabilkin\binds\widgets\binds\BindsWidget::widget(['model' => $model])?>
        </div>
    </div>
    <?php ActiveForm::end(); ?>

</div>

如果评论与评分模型相关联,则在Comment::getChildModels()中指定此模型,以便在删除Post模型时删除所有相关评论以及每个删除评论的评分。

此删除模型方案仅在以下情况下有效:如果这些模型具有uid字段,该字段在bind_uids表的id字段上具有外键,并且通过uid_content字段与父模型相关联。

删除时的递归搜索uid在BindModel::_getUids()方法中实现

配置

要使SEO数据在页面的metatags中显示,需要在配置文件中将SeoBehavior添加到组件View。此外,在地址中需要传递$_GET ?alias=adres-stranicy

'components' => [
    ...
    
    'view' => [
        'as seo' => [
            'class' => \fedornabilkin\binds\behaviors\SeoBehavior::class,
        ],
    ],
],

'modules' => [

    ...

    'binds' => [
        'class' => 'fedornabilkin\binds\Module',
    ],
    'treemanager' => [
        'class' => 'kartik\tree\Module',
        'dataStructure' => [
            'keyAttribute' => 'id',
        ],
    ],
],

说明和讨论