Я только начал работать с 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
В этом случае я обычно просматриваю источник страницы и вижу, что представляет собой URL-адрес действия. Тогда я знаю, что yii пытается выполнить и работать с ним. Также обратите внимание, что при экстремальных обстоятельствах вы можете использовать URL-адрес действия при инициализации CActiveForm – Kevin
Просто подсказка. Обычно соглашения об именах yii указывают, что представления, начинающиеся с подчеркивания, предназначены для частичной визуализации. Это помогает, когда у вас есть 10, 100 или 1000 просмотров, чтобы различать их. – Kevin