如何使用SlimFramework将多个表单发布到相同的路径?

时间:2017-02-07 03:43:12

标签: php forms routing slim

我有以下视图(main.php),其中包含两个发布到同一路径的单独表单:

<form class="form" id="first_form" action="{{ urlFor('main.post') }}" method="post">
    // form data
</form>

<form class="form" id="second_form" action="{{ urlFor('main.post') }}" method="post">
    // form data
</form>

以下是呈现该视图并发布表单数据的路由逻辑:

$app->get('/main', function() use ($app) {
    $app->render('main.php');
})->name('main');

$app->post('/main', function() use ($app) {
    // do something
})->name('main.post');

现在在我的$app->post方法中,我想区分提交的表单并相应地执行单独的逻辑,如下所示:

$app->post('/main', function() use ($app) {
    if(first form was submitted) {
       // do something
    } else if(second form was submitted){
       // do something else
    }
})->name('main.post');

我想要完成的工作是否需要使用中间件?如果没有,我需要实现什么逻辑来完成这个看似简单的任务

1 个答案:

答案 0 :(得分:1)

您可以在表单中包含一个隐藏字段,用于指示提交的表单。

<form class="form" id="first_form" action="{{ urlFor('main.post') }}" method="post">
    <input type="hidden" name="which" value="first_form">
    // form data
</form>

<form class="form" id="second_form" action="{{ urlFor('main.post') }}" method="post">
    <input type="hidden" name="which" value="second_form">
    // form data
</form>

然后在您的路线中检查which输入的值。

$app->post('/main', function() use ($app) {
    $which = $app->request()->post('which')
    if ('first_form' === $which) {
        // do something
    } else if ('second_form' === $which){
        // do something else
    }
})->name('main.post');