An open API service indexing awesome lists of open source software.

https://github.com/rkit/tags-behavior-yii2

Tags Behavior for Yii2
https://github.com/rkit/tags-behavior-yii2

tags yii2

Last synced: 5 months ago
JSON representation

Tags Behavior for Yii2

Awesome Lists containing this project

README

          

# Tags Behavior for Yii2

[![Build Status](https://travis-ci.org/rkit/tags-behavior-yii2.svg?branch=master)](https://travis-ci.org/rkit/tags-behavior-yii2)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/rkit/tags-behavior-yii2/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/rkit/tags-behavior-yii2/?branch=master)

Flexible yii2 behavior for tags.

## Requirements

PHP 7

## Installation

```
composer require rkit/tags-behavior-yii2
```

## Configuration

For example, we have a `Post` model and we want to add tags.
Let's do it.

1. Add `tag` and `post_to_tag` tables and a `Tag` model for the tags

```php
$this->createTable('{{%tag}}', [
'id' => $this->primaryKey(),
'name' => $this->string()->notNull()->unique(),
'frequency' => $this->integer()->notNull()->defaultValue(0),
]);

$this->createTable('{{%post_to_tag}}', [
'post_id' => $this->integer()->notNull()->defaultValue(0),
'tag_id' => $this->integer()->notNull()->defaultValue(0),
]);

$this->addPrimaryKey('', '{{%post_to_tag}}', ['post_id', 'tag_id']);
```

2. Add a `TagsBehavior` behavior to the `Post` model

```php
public function behaviors()
{
return [
'tagsBehavior' => [
'class' => 'rkit\tags\behavior\TagsBehavior',
'relation' => 'tags',
'tagAttribute' => 'name',
'tagFrequencyAttribute' => 'frequency', // or false
'findTag' => function ($value) {
return Tag::find()->where([$this->tagAttribute => $value])->one();
},
'createTag' => function ($value) {
$tag = new Tag();
$tag->{$this->tagAttribute} = $value;
return $tag;
},
],
];
}
```

3. Add a `tags` relation (see `relation` option in the behavior)

```php
/**
* @return \yii\db\ActiveQuery
*/
public function getTags()
{
return $this
->hasMany(Tag::class, ['id' => 'tag_id'])
->viaTable('{{%post_to_tag}}', ['post_id' => 'id']);
}
```

## Usage

### Add tags

```php
$model = new Post();
$model->setTagValues(['example1', 'example2']);
$model->save();
```

### Get tags

```php
$post = Post::find()->with('tags')->where(['id' => $id])->one();
$post->getTagValues();
```

### Remove tags

```php
$model = new Post();
$model->setTagValues([]);
$model->save();
```

## Tests

- [See docs](/tests/#tests)

## Coding Standard

- PHP Code Sniffer ([phpcs.xml](./phpcs.xml))