【发布时间】:2012-05-23 14:06:29
【问题描述】:
我对 MVC 和 Yii 框架很陌生,因此我的问题很可能很愚蠢。如果是这样,请提前接受我的道歉。
我想在网站的管理部分有一个表单,用户可以在其中发布一些内容。我按照示例博客的教程进行操作,但是似乎添加到数据库中定义为文本的字段(我的表单中的 textarea)的内容在提交表单后没有得到更新(其他一切正常)。这是我的表的 sql 语句:
CREATE TABLE `tbl_show` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`presentation` text,
PRIMARY KEY (`id`),
KEY `fk_tbl_show_tbl_season1` (`tbl_season_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
我使用 Gii 制作了我的模型和 CRUD,我只在这里添加了可能相关的部分:
在我的控制器上:
public function actionCreate()
{
$model=new Show;
if(isset($_POST['Show']))
{
$model->attributes=$_POST['Show'];
if($model->save())
{
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
));
还有我的 _form.php:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'show-form',
'enableAjaxValidation'=>false,
)); ?>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'presentation'); ?>
<?php echo $form->textArea($model,'presentation',array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'presentation'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
示范规则:
return array(
array('id, presentation', 'safe', 'on'=>'search'),
);
我不明白为什么只有文本内容没有更新,它们在数据库中显示为空。
提前谢谢你, 干杯, 玛莎
【问题讨论】:
-
如何在模型规则中定义“安全”列表?
-
array('id, title, presentation', 'safe', 'on'=>'search') -
你有这个用于“搜索”场景,但你正在初始化你的模型而没有场景。您需要为“插入、更新”场景添加一个新的安全列表。
-
@bool.dev 更新和插入由框架自动处理,不一定要这样声明,但确实对程序员有帮助。
-
这里一直令人困惑的是,必需的属性总是被视为安全的,这就是为什么声明和插入、更新安全列表不是标准的原因。但你需要它们。