在 Slim 中,我如何传递一个 GET 变量来渲染

In Slim, how do I pass a GET variable to render

我使用 Slim 的时间很短。我还在使用第 2 版。到目前为止一切都很好,但我遇到了一些小问题。我有一个页面显示基于 URL 末尾的 GET 变量的内容。 url 如下所示...

http://localhost/trailcache.com/checklist/21

get 路由的第一行如下所示...

$app->get('/checklist/:Id', function($Id) use($app) {

就这样结束了...

})->name('checklist');

该 Id 参数控制我将哪些信息拉入页面,一切都进行得很好,但现在我添加了一个联系表单,并通过它进行了一些验证。我正在写入数据库并渲染新内容。当我尝试将错误发送回页面时出现问题。目前它看起来像这样...

$app->render('user/checklist.php', [
    'Id' => $Id,
    'errors' => $v->errors(),
    'request' => $request
])->name('checklist');

这行不通。该页面是空白的。 url 它 returns 是...

http://localhost/trailcache.com/checklist

渲染文档显示...

$app->get('/books/:id', function ($id) use ($app) {
    $app->render('myTemplate.php', array('id' => $id));
});

那在 post 路线中不是同样有效吗?它在我的所有其他页面上都有。

如何将这些错误与正确的 GET 变量一起传递,以便显示正确的内容?

这对我来说很好用。

return $this->renderer->render('myTemplate.php', array('id' => $id));

希望对你有用。

经过几天的努力,我找到了解决办法。我首先发现了 map() 并将第一行更改为...

$app->map('/checklist/:Id', function($Id) use($app) {

结束...

})->via('GET', 'POST')->name('checklist');

所以现在路由呈现相同,无论它来自 post 还是 get。然后我将表格指向这条命名路线...

<form action="{{ urlFor('checklist', {Id: Id}) }}" class="form" method="post">

并将所有 post 逻辑移入此路由。由于不需要验证请求是否不是 post 我使用了...

if($app->request->isPost()) {

并将验证码放入其中。提交表单后刷新页面将重新提交表单,因此如果验证通过我添加...

return $app->response->redirect($app->urlFor('checklist', array(
            'Id' => $Id
        )));

我所要做的就是将错误传递给模板,它似乎运行良好。