2010-05-03 2 views
2

Так что я использую Limonade PHP, у которого есть проект RESTful, который эмулирует маршруты PUT, POST, DELETE для создания, обновления, удаления.Передача данных между состояниями PHP

Я пытаюсь разработать некоторые формы проверки, которая идет хорошо. Основная проблема, с которой я столкнулся, заключается в том, как вернуть отфильтрованные данные (которые не прошли проверку), чтобы повторно заполнить форму создания или редактирования.

Как это сделать? Я в настоящее время для создания страницы:

/admin/page/new -> GET function 

/admin/page -> POST function 
+ validate 
    + pass, update db 
    + fail, add errors to flash, redirect to /admin/page/mew 

Это все падает вниз, как я не знаю, как заполнить/администратора/страница/новый с инвалидом, но отфильтрованные данные.

+0

Нужно ли перенаправлять на отказ? Не могли бы вы просто вывести форму снова при неудаче без переадресации? – outis

+0

@outis, главное, что я бы повторил код формы, который уже вызывается с использованием маршрута GET. если вы можете объяснить путь вокруг меня все уши. – 2010-05-03 15:24:48

+0

Это немного неудобно для публикации в комментарии, так что посмотрите на мой ответ ниже. – outis

ответ

1

Вы использовали сеанс для переноса данных в/admin/page/new? http://www.php.net/manual/en/session.examples.basic.php

редактировать: Я просто нашел эту статью: http://www.recessframework.org/page/towards-restful-php-5-basic-tips, который рекомендует использовать куки более $ _SESSION. Он не уточняет, почему, но любой из них достигнет желаемого результата.

+0

- это стандартный способ сделать это? Я думал об использовании этого. – 2010-05-03 14:04:31

+0

IDK о стандарте, но сеансы или файл cookie были первыми решениями, которые пришли мне на ум для передачи данных между состояниями. – cazlab

+1

Только что добавил статью, которую я нашел в своем ответе. Совет # 4 рекомендует вместо этого использовать cookie. – cazlab

1

Чтобы вернуть данные на страницу с перенаправлением, вам нужно либо использовать сеанс, либо мусор, чтобы запрос с получением варов для каждого элемента (не приятно смотреть, а не красиво для закладок, не предлагать).

Я бы предположил, что 'add errors to flash' использует сеанс var (не знаком с Limonade).

Другим вариантом будет , отправив форму с вызовом AJAX, после чего данные формы даже не будут изменены при ошибке.

Конечно, вам по-прежнему нужен не AJAX-метод для обратной совместимости.

Update: Limonade Source подтверждает flash() использует $_SESSION. Итак, вы уже используете сеансовые вары.

+0

@tim, да, теперь, используя сеансы, и все замечательно. не до стандарта для разработки ajax, но это функциональность, которую я хочу добавить, как только приложение закончится. спасибо за ваш вклад. – 2010-05-03 19:13:53

0

Вы можете вывести форму без перенаправления. Поместите форму в скрипт, не содержащий других элементов HTML. Задайте значение любого ввода формы, указанное в $_POST (после вызова htmlspecialchars с соответствующим типом цитаты). Включите скрипт формы в других сценариях, где это необходимо.

В ваших полезных функций:

function passthruFormInput($name) { 
    if (isset($_POST[$name])) { 
     echo htmlspecialchars($_POST[$name], ENT_QUOTES); 
    } 
} 

newForm.php (или что вы хотите назвать его):

<form action="..." method="POST" onsubmit="...(client side validation function)..."> 
    ... 
    <input name="foo" value="<?php passthruFormInput('foo'); ?>"/> 
    ... 
</form> 

Если вы создаете форму динамически, адаптируют выше, чтобы соответствовать. Некоторые вещи не учитывают эту реализацию и подход, но я не могу на нее положиться.

Оставляя публичный доступ к скрипту формы, может не быть проблемой безопасности, но он должен либо находиться за пределами корневой иерархии документа, либо в филиале, защищенном ORDER Allow,Deny или mod_rewrite. Вероятно, это должно быть связано с представлениями.

+0

Я понимаю, что вы имеете в виду. У меня уже есть эта архитектура. к сожалению, я думаю, что этот метод нарушит функциональность фреймворка (limonade-php.net), который я использую. приветствия для ввода. – 2010-05-04 11:56:48

Смежные вопросы