我刚刚开始使用yii,我偶然发现了一个问题。 我有一个名为“users”的表和一个名为“messages”的表。 我基本上想要一个页面,我可以查看用户的详细信息,但也向他发送一条消息,该消息将保存在消息表中。
我有一个名为“user / view.php”的视图,其中包含:
<h1>View User #<?php echo $model->id; ?></h1>
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id',
'username',
'first_name',
'last_name',
),
)); ?>
<?php $message=new Message;
echo $this->renderPartial('_messagesend', array('model'=>$message)); ?>
_messagesend表单(使用gii创建)看起来像:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'message-_messagesend-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
//for the sake of simplicity lets just insert the id's manually for now
<div class="row">
<?php echo $form->labelEx($model,'idFrom'); ?>
<?php echo $form->textField($model,'idFrom'); ?>
<?php echo $form->error($model,'idFrom'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'idTo'); ?>
<?php echo $form->textField($model,'idTo'); ?>
<?php echo $form->error($model,'idTo'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'msg'); ?>
<?php echo $form->textField($model,'msg'); ?>
<?php echo $form->error($model,'msg'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Send'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
我在UserController中有一个简单的视图来显示详细信息:
public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id)
));
}
现在我想知道如何添加控制器来保存消息。在创建gii之后,我得到了一个我尝试使用的代码并进行了一些修改:
public function actionMessagesend()
{
$model=new Message;
if(isset($_POST['Message']))
{
$model->attributes=$_POST['Message'];
if($model->save()){
$this->redirect(array('admin'));
}
}
$this->render('_messagesend',array('model'=>$model));
}
我试图在UserController.php中添加这个控制器功能,但它似乎不起作用,我试图向MessageController.php添加相同的功能,但它似乎也不起作用。我试图删除所有代码,只添加一个重定向来显示控制器代码是否实际命中但它没有重定向(我在usercontroller和messagecontroller中都尝试过)。所以我感觉我的代码没有达到。你们知道我在这里缺少什么吗?
也许还有一个额外的问题:是否有更好的建议去做我想做的事情?
非常感谢!
致以最诚挚的问候,
WtFudgE
答案 0 :(得分:1)
未达到您的邮件发送操作,因为默认情况下CActiveForm
会提交到当前页面,因此您必须将邮件处理添加到view
操作,否则您需要设置action
的{{1}}属性。
以下是属性文档的链接:http://www.yiiframework.com/doc/api/1.1/CActiveForm#action-detail
因此视图中的表单小部件应该是:
CActiveForm
答案 1 :(得分:1)
您也可以通过编辑视图页面中的提交按钮来实现此目的:
<?php echo CHtml::button('Send', array('submit' => array('message/messageSend')));?>