是的,唯一的问题是我是否正确。也许可以解决它。
我在Yii有一个应用程序,我有一个简单的Admin后端,我可以在其中放置一些预定义的设置。
MySQL数据库表:
我有一个管理员控制器: 我只展示了预期的行动
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中有一个不断增长的列表,可以手动保存每个字段。
提前感谢您的帮助。
答案 0 :(得分: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
从中获取数据)然后一切其他将自动运作。