Я работаю со Слимом совсем недавно. Я все еще на второй версии. Пока все идет хорошо, но я наткнулся на небольшую загадку. У меня есть страница, которая отображает содержимое на основе переменной GET в конце URL. 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 возвращается …
http://localhost/trailcache.com/checklist
Документация для рендера показывает …
$app->get('/books/:id', function ($id) use ($app) {
$app->render('myTemplate.php', array('id' => $id));
});
Разве это не будет работать в почтовом маршруте так же? Это есть на всех моих других страницах.
Как можно передать эти ошибки вместе с правильной переменной GET, чтобы отображался правильный контент?
Это работает для меня просто отлично.
return $this->renderer->render('myTemplate.php', array('id' => $id));
Надеюсь, это работает для вас.
После нескольких дней борьбы с этим я нашел решение. Сначала я открыл map () и изменил первую строку на …
$app->map('/checklist/:Id', function($Id) use($app) {
и конец …
})->via('GET', 'POST')->name('checklist');
так что теперь маршрут отображается одинаково, независимо от того, идет ли он от почты или до. Затем я указал форму на этот названный маршрут …
<form action="{{ urlFor('checklist', {Id: Id}) }}" class="form" method="post">
и переместил всю почтовую логику внутри этого маршрута. Поскольку нет необходимости проверять, был ли запрос не постом, который я использовал …
if($app->request->isPost()) {
и поместите код проверки внутри. Обновление страницы после отправки формы повторно отправляет форму, поэтому, если проверка прошла успешно, я добавил …
return $app->response->redirect($app->urlFor('checklist', array(
'Id' => $Id
)));
Все, что мне нужно было сделать, это передать ошибки в шаблон, и он, кажется, работает отлично.