Browse Source

Fixes #13035: Use ArrayHelper::getValue() in SluggableBehavior::getValue()

tags/2.0.11
Herbert Maschke 8 years ago committed by Alexander Makarov
parent
commit
b58fee7d37
  1. 1
      framework/CHANGELOG.md
  2. 3
      framework/behaviors/SluggableBehavior.php
  3. 39
      tests/framework/behaviors/SluggableBehaviorTest.php

1
framework/CHANGELOG.md

@ -39,6 +39,7 @@ Yii Framework 2 Change Log
- Enh #12816: Added `columnSchemaClass` option for `yii\db\Schema` which adds ability to specify custom `yii\db\ColumnSchema` class (nanodesu88)
- Enh #12881: Added `removeValue` method to `yii\helpers\BaseArrayHelper` (nilsburg)
- Enh #12901: Added `getDefaultHelpHeader` method to the `yii\console\controllers\HelpController` class to be able to override default help header in a class heir (diezztsk)
- Enh #13035: Use ArrayHelper::getValue() in SluggableBehavior::getValue() (thyseus)
- Enh: Added constants for specifying `yii\validators\CompareValidator::$type` (cebe)

3
framework/behaviors/SluggableBehavior.php

@ -9,6 +9,7 @@ namespace yii\behaviors;
use yii\base\InvalidConfigException;
use yii\db\BaseActiveRecord;
use yii\helpers\ArrayHelper;
use yii\helpers\Inflector;
use yii\validators\UniqueValidator;
use Yii;
@ -139,7 +140,7 @@ class SluggableBehavior extends AttributeBehavior
if ($this->isNewSlugNeeded()) {
$slugParts = [];
foreach ((array) $this->attribute as $attribute) {
$slugParts[] = $this->owner->{$attribute};
$slugParts[] = ArrayHelper::getValue($this->owner, $attribute);
}
$slug = $this->generateSlug($slugParts);

39
tests/framework/behaviors/SluggableBehaviorTest.php

@ -44,8 +44,15 @@ class SluggableBehaviorTest extends TestCase
'name' => 'string',
'slug' => 'string',
'category_id' => 'integer',
'belongs_to_id' => 'integer',
];
Yii::$app->getDb()->createCommand()->createTable('test_slug', $columns)->execute();
$columns = [
'id' => 'pk',
'name' => 'string',
];
Yii::$app->getDb()->createCommand()->createTable('test_slug_related', $columns)->execute();
}
public function tearDown()
@ -83,6 +90,25 @@ class SluggableBehaviorTest extends TestCase
/**
* @depends testSlug
*/
public function testSlugRelatedAttribute()
{
$model = new ActiveRecordSluggable();
$model->getBehavior('sluggable')->attribute = 'related.name';
$relatedmodel = new ActiveRecordRelated();
$relatedmodel->name = 'I am an value inside an related activerecord model';
$relatedmodel->save(false);
$model->belongs_to_id = $relatedmodel->id;
$model->validate();
$this->assertEquals('i-am-an-value-inside-an-related-activerecord-model', $model->slug);
}
/**
* @depends testSlug
*/
public function testUniqueByIncrement()
{
$name = 'test name';
@ -176,6 +202,19 @@ class ActiveRecordSluggable extends ActiveRecord
{
return $this->getBehavior('sluggable');
}
public function getRelated()
{
return $this->hasOne(ActiveRecordRelated::className(), ['id' => 'belongs_to_id']);
}
}
class ActiveRecordRelated extends ActiveRecord
{
public static function tableName()
{
return 'test_slug_related';
}
}
class ActiveRecordSluggableUnique extends ActiveRecordSluggable

Loading…
Cancel
Save