0

我刚开始使用 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 中都尝试过)。所以我觉得我的代码没有到达。你们知道我在这里缺少什么吗?

也许还有一点额外的问题:有没有更好的建议来做我想做的事?

非常感谢!

此致,

软糖

4

2 回答 2

1

未达到您的消息发送操作,因为默认情况下CActiveForm提交到当前页面,因此您必须将消息处理添加到view操作中,或者您需要action为您的CActiveForm.

这是属性文档的链接:http ://www.yiiframework.com/doc/api/1.1/CActiveForm#action-detail

所以视图中的表单小部件应该是这样的:

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'message-_messagesend-form',
    'enableAjaxValidation'=>false,
    'action' => array( '/message/messageSend' ), // change depending on your project
)); ?>
于 2013-04-30T19:42:36.677 回答
1

您还可以通过编辑视图页面中的提交按钮来实现这一点,如下所示:

    <?php echo CHtml::button('Send', array('submit' => array('message/messageSend')));?>
于 2013-05-02T05:02:22.220 回答