0

是的,唯一的问题是我这样做是否正确。也许可以解决它。

我在 Yii 中有一个应用程序,其中有一个简单的管理后端,我可以在其中放入一些预定义的设置。

MySQL数据库表:

我的 MySQL admin_setting 表

我有一个管理员控制器: 我只显示预期的操作

class AdminController extends Controller
{

    public function actionIndex()
    {
        // Update a setting
        if (isset($_POST['submit']))
        {
            AdminSetting::updateSetting('topCategory', $_POST['topCategory']);
            AdminSetting::updateSetting('marketRegion', $_POST['marketRegion']);
        }

        // Get all settings
        $topCategory = AdminSetting::model()->find('name = :name', array(':name' => 'topCategory'));
        $marketRegion = AdminSetting::model()->find('name = :name', array(':name' => 'marketRegion'));

        if (isset($marketRegion->value))
            $marketRegion = $marketRegion->value;
        if (isset($topCategory->value))
            $topCategory = $topCategory->value;

        $this->render('index', array('topCategory' => $topCategory, 'marketRegion' => $marketRegion));
    }
}

模型 AdminSetting.php: 我只显示添加的功能:updateSetting

class AdminSetting extends CActiveRecord
{

    public static function updateSetting($name, $value)
    {
        Yii::app()->db->createCommand("UPDATE admin_setting SET value = '$value' WHERE name = '$name'")->execute();
    }
}

用户界面:

简单的用户界面

我是这样做的,因为我有一页,有多条记录显示数据。这不是 Yii 默认的工作方式。无论我在哪里搜索,我只看到其他程序员一次编辑一条记录。

第二个问题出现了:如何使用 ActiveRecordModel 的默认功能一次将多条记录保存到数据库中。

我看到如果我继续这样下去,我的 actionIndex 中有一个不断增长的列表,可以手动保存每个字段。

在此先感谢您的帮助。

4

1 回答 1

2

这里最好的方法是编写一个从CActiveForm. 为此,您将必须覆盖表单模型__get__set方法以获取所有配置设置的列表(假设从硬编码数组中,因为实际的数据库条目可能因任何原因最终丢失)并且表现得像所有它们作为模型的属性存在。

完成此操作后,您现在已准备好获得巨大的收益:

您可以像配置设置是表单模型的属性一样工作

  • 不再需要将每个变量作为自己的变量传递;只需传递$model给视图并访问类似的设置$model->settingName(您的__get覆盖需要确保它有效)

  • 您现在可以将所有配置选项大量设置为属性:

    $model = new MyAdminFormModel;
    $model->attributes = $_POST['MyAdminFormModel'];
    

您可以轻松地将整个表单一次性渲染为一系列字段

通过创建一个新的CForm并动态填充其elements属性来做到这一点(MyAdminFormModel应该有所有必要的信息来做到这一点)。然后,您可以使用类似的东西轻松呈现表单

foreach($form->getElements() as $element) {
    echo $element->render();
}

当然,所有这些都需要大量的代码,但是当你设置它时,你将能够只向数组中添加一行(MyAdminFormModel从中获取数据),然后其他一切都会自动工作。

于 2012-06-23T15:32:38.570 回答