Yii在“查看”页面中提交表单

时间:2013-04-30 17:24:17

标签: php forms post view yii

我刚刚开始使用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

2 个答案:

答案 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')));?>