基本上,我想创建一个工厂类,它将使用几个不同的模型。我不知道如何在yii2中这样做。任何帮助都会很好。
以下是我想要做的一般概念。 使用app \ models \ Event; 使用app \ models \ EventParticipant; 使用app \ models \ Match;
/**
* @property Event $Event
* @property EventParticipant $EventParticipant
* @property Match $Match
*/
abstract class Tournament
{
protected $_id;
protected $_event;
protected $_type;
final public function __construct($event) {
$this->Event = new Event();
$this->EventParticipant = new EventParticipant();
$this->Match = new Match();
if(!$event) {
throw new \yii\web\HttpException(400, 'Invalid Event', 405);
}
$this->_id = $event['Event']['id'];
}
}
}
答案 0 :(得分:1)
我会避免在模型中抛出Http异常,在控制器中使用它们。例如,您可以抛出InvalidConfigurationException,因为您需要拥有$ event。
工厂设计模式有很多实现,这里是最简单的
class TournamentFactory
{
public static function create(Event $event, EventParticipant $eventParticipant, Match $match) {
return new Tournament($event, $eventParticipant, $match);
}
}
但我不认为它在这个例子中有用。在我的示例中,我主要用它来切换对象类型,如下所示:
$grandSlam = TournamentFacory::create('grandSlam');
$grandSlam->setEvent($event);
$grandSlam->setParticipants($participants);
...
$masters = TournamentFacory::create('masters');
...
这些对象可能具有相同的属性,但实现方式不同。例如,大师们可以参加两个获胜的比赛,3个大奖赛......等等......