Я могу предложить следующее.
Во-первых, создать базовую модель (например, в components
каталоге) другие ваши модели будут выведены из:
class BaseModel extends CActiveRecord
{
public static function getAdminRoute()
{
return null;
}
}
Статический getAdminRoute
метод обеспечит маршрут Yii к административной странице модели. И вы расширяете BaseModel
как это:
class Company extends BaseModel
{
public static function model($className = __CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return "{{company}}";
}
public static function getAdminRoute()
{
return "admin/company";
}
}
Следующим шагом является deretmine все модели, которые заявлены в приложении:
$models = array();
$modelsDir = Yii::getPathOfAlias("application.models");
$dh = opendir($modelsDir);
if ($dh !== false)
{
$matches = array();
while (($modelFileName = readdir($dh)) !== false)
{
if (preg_match("/^([A-Za-z0-9]+)\.php$/", $modelFileName, $matches))
array_push($models, $matches[1]);
}
closedir($dh);
}
После списка типовых классов извлекаемых (в соответствии с Yii именования файла имя которого совпадает с именем его класса) вы можете перемещаться по нему и получить административные связи для тех моделей, которые перекрываться getAdminRoute
метод:
$adminLinks = array();
foreach($models as $model)
{
if (method_exists($model, "getAdminPage"))
{
$modelAdminRoute = $model::getAdminPage();
if ($modelAdminRoute !== null)
array_push($adminLinks, Yii::app()->createUrl($modelAdminRoute));
}
}
Конечно, вы можете опустить admin
часть в getAdminRoute
и реализовать этот метод по своему вкусу и добавить дополнительный метод для получения текста ссылки.
По соображениям производительности вы также можете попытаться кэшировать полученный список административных ссылок, используя caching features provided by Yii.
Таким образом, я получил правильный путь. Вот как я решил это: в моем контроллере я обернул верхний код в функцию, изменил путь к моделям, которые я искал, также пришлось изменить '.php' только на' php'; то я написал этот скрипт в представлениях ' php $ filenames = $ this-> links(); ?> $ файл):> Edit 'и теперь он отлично работает, спасибо –