Traits - uniqcle/Yii2 GitHub Wiki
Трейт - позволяет избегать повторного использования методов в разных классах. Фактически Trait это часть класса, кот. существует отдельно, но может подключаться к тем классам в которых она востребована.
Создаем в моделях папку example
в ней 2 метода
frontend/models/example/Animal.php
namespace frontend\models\example;
class Animal
{
public function walk(){
echo 'I can walk';
}
}
frontend/models/example/Human.php
namespace frontend\models\example;
class Human
{
public function walk(){
echo "I can walk";
}
}
В контроллере frontend/controllers/ExampleController.php
namespace frontend\controllers;
use yii\web\Controller;
use frontend\models\example\Animal;
use frontend\models\example\Human;
class ExampleController extends Controller
{
public function actionMove(){
$animal = new Animal();
$human = new Human();
$animal->walk();
$human->walk();
}
}
Чтобы избежать дублирования кода создаем frontend/models/example/SpecialTrait.php
namespace frontend\models\example;
trait SpecialTrait
{
public function walk(){
echo "I can walk";
}
}
А в классах Animal
, Human
добавляем конструкцию use
namespace frontend\models\example;
class Animal
{
use SpecialTrait;
}