protected function setupBelongsTo($relationDetails) { // get and verify the relation foreign key field if (isset($relationDetails[2]) && $relationDetails[2]) { $this->_modelAttribute = $relationDetails[2]; } else { throw new CException(Yii::t('yii', 'The {relation} relation in {model} does not specify a foreign key field for the {class} widget.', array('{relation}' => $this->relation, '{model}' => get_class($this->model), '{class}' => get_class($this)))); } // see if empty is allowed if ($this->model->isAttributeRequired($this->_modelAttribute)) { $this->allowEmpty = false; } // set up the name and ID for the widget $this->resolveWidgetName(); // sets the right name for the multi widget $this->resolveWidgetId(); // sets the right id for the multi widget // attributes to pass to widget $widgetAttrs = array(); // set default values based on data type if ($this->widgetDataFormat == self::DATA_FORMAT_TEXT) { $widgetAttrs['htmlOptions'] = array('value' => $this->getRelatedData()->{$this->relationDisplayField}); } else { // self::DATA_FORMAT_ARRAY $widgetAttrs['value'] = $this->getAllRelatedListData(); } // set up variables for the widget $widgetAttrs['model'] = $this->model; $widgetAttrs['attribute'] = $this->_modelAttribute; // merge the widget properties $this->widgetProperties = CMap::mergeArray($this->widgetProperties, $widgetAttrs); }
/** * Override to properly check if the attribute is required or not. * (non-PHPdoc) * @see CModel::isAttributeRequired() */ public function isAttributeRequired($attribute) { if (property_exists($this, $attribute)) { return parent::isAttributeRequired($attribute); } return $this->model->isAttributeRequired($attribute); }