2018-11-28 10:43:02 1262次浏览 1条回答 0 悬赏 30 金钱

如题,想请教下视图的表单是如何提交到控制器的?
这个问题我仔细看了权威指南给的实例,一点头绪都没有。
比如:
视图文件 view.php
我的表单 myform
控制器 mycontroller.php
表单处理方法 dealwith()

我想使用 dealwith() 方法处理表单 myform,应该怎么写?写在视图还是别的地方?或者如何实现???
希望能给点意见,谢谢。。。

补充于 2018-11-28 11:13

我发现可以在视图文件中 创建 ActiveForm 对象后直接修改他的参数 $action 把表单提交到任意的方法处理,只是看起来有点‘野路子’就没有别的比较正规的官方写法吗?
下面是我在视图文件中的写法,请大神指点下:

<?php $form = ActiveForm::begin();$form->action='/basic/web/index.php?r=site/other'?>
<?= $form->field($model,'name');?>
<?= $form->field($model,'email');?>

<div class="form-group">
    <?= Html::submitButton('提交',['class'=>'btn btn-primary']);?>
    
</div>
<?php ActiveForm::end();?>

这个是权威指南的一个实例,添加

$form->action='/basic/web/index.php?r=site/other'

之前表单是给 entry() 方法处理的 现在 提交给了 other() 处理,实测通过。。。
还望指点,谢谢。。。

最佳答案

  • 刘师傅 发布于 2018-11-28 14:07 举报

    表单这个东西,我在文档上给你找了一段,其实差不多类似:
    https://www.yiichina.com/doc/guide/2.0/input-forms
    Yii2没有把视图和哪个提交地址绑定,这个还是原始HTML的表单知识,action还是你来写,爱咋写咋写,自古以来就是这样,不写的话默认就是当前的路由,这不是野路子:

    <?php
    $form = ActiveForm::begin([
        'id' => 'xxxxx_form',
        //这里使用了Url助手函数封装下而已,直接写也OK的。
        'action' => Url::to(['/myserver/user', 'uid' => $uid]),
        'layout' => 'horizontal',
        'options' => ['class' => 'form-content'],
        'method' => 'POST',
        'fieldConfig' => [
            'horizontalCssClasses' => [
                'label' => 'col-xs-4 col-sm-4',
                'wrapper' => 'col-xs-8 col-sm-8',
            ]
        ]
    ]);
    ?>
    

    如果你想提交到dealwith()方法,这个有点难度,但是也不是不可能。
    Yii2的控制器里一般包含两种方法:
    一种是内联方法,类似这种actionXXXX()的,内联的最多;
    还有一种是独立方法,这个需要使用【行为机制】,简单来说控制器里写个 actions()方法,看下这篇文档:
    https://www.yiichina.com/doc/guide/2.0/structure-controllers#standalone-actions
    其它再说。

    1 条回复
    回复于 2018-11-29 08:00 回复

    谢谢,对我很有帮助。

    觉得很赞
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
sk811229
经理

sk811229

注册时间:2018-05-23
最后登录:2022-10-06
在线时长:16小时47分
  • 粉丝0
  • 金钱770
  • 威望10
  • 积分1030

热门问题