2013-04-30 3 views
0

Я только начал работать с yii, и я наткнулся на проблему. У меня есть таблица под названием «пользователи» и таблица, называемая «сообщениями». В основном я хочу иметь страницу, где я могу просмотреть данные пользователя, а также отправить ему сообщение, которое будет сохранено в таблице сообщений.Yii Отправить форму на странице просмотра

У меня есть представление с именем "пользователь/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) 
     )); 
    } 

А теперь я хочу, чтобы понять, как я могу добавить CONTR oller, чтобы сохранить сообщение. После создания 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

В этом случае я обычно просматриваю источник страницы и вижу, что представляет собой URL-адрес действия. Тогда я знаю, что yii пытается выполнить и работать с ним. Также обратите внимание, что при экстремальных обстоятельствах вы можете использовать URL-адрес действия при инициализации CActiveForm – Kevin

+0

Просто подсказка. Обычно соглашения об именах yii указывают, что представления, начинающиеся с подчеркивания, предназначены для частичной визуализации. Это помогает, когда у вас есть 10, 100 или 1000 просмотров, чтобы различать их. – Kevin

ответ

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 
)); ?> 
+0

сладкий, это сделало работу :) – WtFudgE

1

Вы также можете достичь этого путем редактирования кнопки отправки в представлении например:

<?php echo CHtml::button('Send', array('submit' => array('message/messageSend')));?>