用Yii提交文本

时间:2014-11-18 15:52:46

标签: php forms yii

我对Yii了解并且正在尝试学习一些更基本的功能。我正在使用Yii使用的基本应用程序,但使用我自己的模型。到目前为止,一切都在努力。我现在正在尝试为项添加注释。我创建了一个小部件,我希望按钮在单击表单数据时提交,而不是将我带到默认的创建页面。

用于初始化小部件的代码

<?php
    $this->widget('application.components.Comment', array(
        'url'=>'url',
    ));
?>

Comment.php

<?php
class Comment extends CWidget {

public $comments = array();
public $url = '';

public function run() {
    $model=new AlbumComment;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['AlbumComment']))
    {
        $model->attributes=$_POST['AlbumComment'];
        if($model->save())
            $this->redirect(array('view','id'=>$model->comment_Id));
    }
    $this->render('comment', array('url' => $this->url));
}
}?>

comment.php

<?php echo CHtml::beginForm('Create', 'post', array('id'=>'commentForm')); ?>
<div class='addComment' style='display: block; width: 170px;'>
<div id='commentBanner' style='color: #298dcd; background: none repeat scroll 0 0 #b7d6e7; padding-left: 15px; font-weight: 600; font-size: 12px;'>Write Commit</div>
<?php echo CHtml::textField('comment', '', array('style'=>'height: 25px; width: 164px; margin: 5px 0;'));?>
<?php 
    $id = preg_match('/\d$/', Yii::app()->request->url, $model);
    echo CHtml::textField('commentId', $id, array('style'=>'display:none;'));?>

<?php 
    $pattern = '/\d$/';
    $id = preg_match('/\d$/', Yii::app()->request->url, $model);
    //$url = Yii::app()->createUrl('AlbumComment/Create', array('album_Id'=>$id));
    echo CHtml::button(
    'submit',
    array(
        'submit'=>'components/Comment',
    ));?>
</div>

这会将我重定向到我正在使用的任何模型的创建页面,但我希望它自动提交输入的文本并保存到我正在使用的模型的数据库中。我希望这很清楚,任何帮助都表示赞赏。

编辑:我得到它给我正确提交的数据。最后一部分是将它指向Comment.php而不是AlbumCommentController.php

我试过了:

echo CHtml::button(
'submit',
array(
    'submit'=>'components/Comment',
));?>

我得到:系统无法找到所请求的操作“components / Comment”。我有'submit'=&gt;'评论'但得到了:系统无法找到请求的操作“评论”。

任何想法?

1 个答案:

答案 0 :(得分:0)

首先,以下代码始终将表单提交到Create页面“

echo CHtml::button('submit',array('submit' => 'Create'));

正如Yii的官方文件所说:

  

提交:字符串,指定要提交的网址。如果当前元素有父表单,则会提交该表单,如果'submit'为非空,则其值将替换为表格的网址。如果没有父表单,则“params”中列出的数据将(通过POST方法)提交到“submit”中的URL或当前请求的URL(如果“submit”为空)。

所以,你需要改变它。另一方面,您必须创建Yii样式的网址。例如,ctrl/action必须写成如下所示:

Yii::app()->createUrl('ctrl/action');

还建议使用CHtml创建如下表单:

    echo CHtml::beginForm('action', 'post', array('id'=>'commentForm'));
    echo CHtml::textField('comment', '', array('style'=>'height: 25px; width: 164px; margin: 5px 0;'));
    echo CHtml::submitButton('Submit');
    echo CHtml::endForm();

另一个重要的注意事项是,当您尝试将记录保存到数据库时,您正在使用ActiveRecord。因此,您必须改为使用ActiveForm或更改输入名称,例如ModelName[AttributeName]