/** * @param \yii\db\ActiveRecord $model * @param string $defaultView * @return string */ public function computeViewFile($model, $defaultView = '') { if (Yii::$app->response->view_id !== null) { $view = \app\models\View::getViewById(Yii::$app->response->view_id); if (!is_null($view)) { if ($view === 'default') { $view = ViewObject::getViewByModel($model->parent); } return $view === null ? $defaultView : $view; } } if (is_null($model)) { return $defaultView; } do { $view = ViewObject::getViewByModel($model); if (is_null($view) || $view == 'default') { $view = ViewObject::getViewByModel($model->parent, true); } if (!is_null($view)) { return $view === 'default' ? $defaultView : $view; } $model = $model->parent; } while (!is_null($model)); return $defaultView; }
/** * Поиск представления по модели * * @param Object $model * @return string|null Возвращает имя файла или null, если ничего не найдено */ public static function getViewByModel($model = null) { if (null === $model || !is_object($model)) { return null; } if (null === ($object = Object::getForClass($model::className()))) { return null; } $cacheKey = "View:Object:ModelId" . $object->id . ":" . $model->id; $viewObject = Yii::$app->cache->get($cacheKey); if ($viewObject === false) { $viewObject = static::find()->where(['object_id' => $object->id, 'object_model_id' => $model->id])->one(); } if ($viewObject !== null) { Yii::$app->cache->set($cacheKey, $viewObject, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($viewObject, $viewObject->id), \devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($object, $object->id), \devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($model, $model->id)]])); return View::getViewById($viewObject->view_id); } else { return null; } }