Yii:按下submitButton时运行一个函数

时间:2016-04-17 14:37:04

标签: php yii

我是Yii的新手,并试图了解现有的网络应用程序,所以请耐心等待。

我一直遇到某个功能的问题,在actionView被调用here时似乎无法保留数据,但我想也许我对这个问题的解决方法都错了。

相反,我想也许按钮可以直接从控制器运行该功能,而不是......之前的任何事情。

我查看了具有此内容的示例here

<?php echo CHtml::submitButton('CSV Report', array('submit'=>'getReport')); ?>

getReport是我的控制器中的函数(actionGetReport)。

不幸的是,它不起作用。这是我_commentform.php的代码:

<?php $post = $forum; ?>
<?php $comment = $model; ?>
<div id="comment_form<?=$post->id?>" class="other-member-comment-box">

<?php 
 $user=Persons::model()->findByAttributes(array('party_id'=>Yii::app()->user->id)); 
 $country=Lookup_codes::model()->findByAttributes(array('id'=>$user->country)); 
 $location = empty($country) ? '' : 'from '.$country->name;
?>
 <div class="user-profilepic">
    <a href="<?php echo Yii::app()->createUrl('persons/view/id/'.$user->showViewLinkId())?>"><img src="<?php 
        if(!empty($user->image) AND file_exists( Yii::getPathOfAlias('webroot').'/images/profile_picture/'.$user->party_id . $user->image)){
            echo Yii::app()->request->baseUrl.'/images/profile_picture/'.$user->party_id . $user->image;
        } else echo Yii::app()->request->baseUrl.'/images/profile_picture/NA.jpg';
     ?>"></a>
 </div>
<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'comment-form',
    'action'=>Yii::app()->createUrl('forum/view/id/'.$forum->id),
    'enableAjaxValidation'=>false,
)); ?>

    <?php echo $form->errorSummary($model); ?>
    <div class="row">
        <?php echo $form->hiddenField($model,'node_type_id',array('value'=>'7')); ?>
        <?php echo $form->error($model,'node_type'); ?>
    </div>
        <div class="row">
        <?php echo $form->hiddenField($model,'content_id',array('value'=>$forum->id)); ?>
        <?php echo $form->error($model,'content_id'); ?>
    </div>
        <div class="row">
        <?php echo $form->hiddenField($model,'category',array('value'=>$forum->category)); ?>
        <?php echo $form->error($model,'category'); ?>
    </div>
    <div class="row">
        <?php echo $form->textArea($model,'content',array('rows'=>6, 'cols'=>90),array('id'=>'sample')); ?>
        <?php echo $form->error($model,'content'); ?>
    </div>

    <input type="hidden" value="<?php echo $view; ?>" id="view" name="view"/>
    <div class="row buttons">
    <?php
    if ($view == 'view'){
        if ($model->isNewRecord) {
            echo CHtml::submitButton('Reply', array('id'=>'comment'.$comment->id));
        } else {
            echo CHtml::button('Save', array('submit'=>'updatecomment'));
        }
    }?>
    </div>
<?php $this->endWidget(); ?>
</div><!-- form -->
</div>

这是我控制器的UpdateComment功能:

public function actionUpdateComment()
{
    Yii::log(CVarDumper::dumpAsString("ForumController: Update COMMENT!"));
    Yii::log(CVarDumper::dumpAsString($_POST['Comment']));
    exit();
}

我不确定$_POST['Comment']会得到什么,但如果代码有效,我至少会指望它注销"ForumController: Update COMMENT!"。它没有。

我尝试将submitButton更改为button,但这完全取消了按钮功能。

接下来,我尝试了this answer here

所以我将submitButton代码更改为:

echo CHtml::submitButton($model->isNewRecord ? 'Reply' : 'Save',array('id'=>'comment'.$comment->id));

并将此添加到最后:

<script>
    $(document).ready(function() {
        $('#text_form_submit').click(function(ev) {
            ev.preventDefault();
            $.ajax({ type: 'POST', dataType: 'JSON',
                url: '<?php echo Yii::app()->createUrl("forum/UpdateComment"); ?>',
                success:function(data){
                    if(data !==  null) {
                        $('#Text_group').val(data);
                        $('#text-form').submit();
                    }
                },
                error: function() {
                    alert("Error occured!!!.");
                },
            });
            return false;
        });
    });
</script>

不完全确定代码的作用,除了调用函数之外,它也不起作用(我也从GET更改POST并返回)。

有什么建议吗?我觉得CActiveForm应该归咎于此,但即使修改它也会导致网站加载页面失败。

1 个答案:

答案 0 :(得分:0)

你有一个很长的问题,可能是你应该用更简单的问题分解你的问题..

如果回答提交按钮不包含目标函数,请参阅此文档

http://www.yiiframework.com/doc/api/1.1/CHtml#submitButton-detail

目标函数(php控制器/动作)以表格形式定义..这是来自html ..是定义提交数据目标的表单定义..

如果要执行actionGetReport,则应在表单操作中定义目标

<?php $form=$this->beginWidget('CActiveForm', array(
   'id'=>'comment-form',
   'action'=>Yii::app()->createUrl('yourController/actionGetReport'),
   'enableAjaxValidation'=>false,
 )); ?>