Должен ли мой фреймворк одновременно иметь доступ к $ _GET и $ _POST? - PullRequest
3 голосов
/ 09 июня 2009

Я знаю, что вы можете использовать одновременно и $_GET, и $_POST, но является ли это обязательной "функцией"? Я пишу рамки, где вы можете получить доступ к вводу через:

$value = $this->input->get('name','');
$value = $this->input->post('name','');
$value = $this->input->cookies('name','');

Я просто думаю, есть ли необходимость в GET и POST одновременно? Разве я не могу просто сделать:

$value = $this->input('name','default value if not set');

Чтобы получить данные GET / POST, в соответствии с которыми был сделан HTTP-запрос? Файлы cookie будут доступны только через ->cookies(), но я должен использовать ->get() и ->post() вместо того, чтобы делать что-то вроде ->input()?

Спасибо за ваш вклад!

Ответы [ 8 ]

5 голосов
/ 09 июня 2009

Вполне возможно, что в архитектуре REST я добавлю такой продукт:

POST /products?location=Ottawa HTTP/1.0

name=Book

И продукт будет автоматически связан с местоположением в параметрах запроса.

В двух словах: есть семантически обоснованные причины для разрешения того и другого, но их всегда можно преобразовать в одно или другое. При этом, хотите ли вы навязать такое использование вашим пользователям?

4 голосов
/ 09 июня 2009

Да, но вы, возможно, захотите убедиться, что при использовании этого кода вы проверяете, что метод запроса - это POST, если вы собираетесь изменить что-либо в результате запроса, а не обрабатывать GET и POST как одно и то же.

Это потому, что, как правило, запросы GET не должны иметь побочных эффектов, все, что они должны делать, это "получать" вещи.

Редактировать Это кажется менее актуальным, так как вы прояснили свой вопрос, но я все равно оставлю его здесь

3 голосов
/ 16 июня 2009

Да!
Я думаю, вы должны разрешить доступ к $_GET и $_POST одновременно. И я не думаю, что вы можете просто объединить их вместе. (У вас может быть возможность, например, PHP и недобросовестные $_REQUEST.) Вы можете получить запрос вроде:

POST /validator?type=strict HTTP/1.1

type=html/text
body=<h1>Hello World</h1>

Обратите внимание, что имя переменной type используется дважды, но в разных областях! (Однажды в URI, определяющем ресурс, который должен обрабатывать POST, а затем в самом опубликованном объекте.) В PHP это выглядит так:

$_GET => ('type' => 'strict')
$_POST => ('type' => 'html/text', 'body' => '<H1>Hellow World</h1>')

PHP: способ простого анализа URI и помещения параметров в $_GET несколько сбивает с толку. URI используется с большинством (всех?) HTTP-методов, таких как POST, GET, PUT, DELETE и т. Д. (Не только GET, как PHP поверил бы.) Возможно, вы можете быть революционером и использовать некоторые из своих собственных языков. :

$a = $this->uri('name');//param passed in the URI (same as PHP:s $_GET)
$b = $this->entity('body');//var passed in an entity (same as PHP:s $_POST)
$c = $this->method(); //The HTTP method in question ('GET', 'POST' etc.)

А может быть, даже некоторые служебные функции:

if($this->isGET()){
     ...
}elseif($this->isPOST()){
     ...
)

Я знаю, дикий и сумасшедший :) 1025 * Удачи и веселья!
ура!

1 голос
/ 09 июня 2009

вы можете использовать только метод ввода, но с флагами, если пользователь хочет вводить из определенной переменной:

$this->input('abc', '');
$this->input('abc', '', self::I_POST);
$this->input('abc', '', self::I_GET);
$this->input('abc', '', self::I_COOKIE);
0 голосов
/ 10 июня 2009

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

Если вы собираетесь работать с формами, изменять данные и ограниченный доступ; Вам следует изучить домен CSRF и узнать, как эта проблема безопасности может повлиять на вас.

В общем, если вы можете быть откровенны в обоих случаях, разумно сделать это.

0 голосов
/ 09 июня 2009

Я бы порекомендовал сохранить как POST, так и GET, поскольку вы не можете предсказать, как они будут использоваться.

Самое главное, убедитесь, что перед заполнением ваших объектов проверяете на наличие эксплойтов безопасности, таких как XSS, внедрение SQL в $ _ [POST | GET].

0 голосов
/ 09 июня 2009

Я бы предложил хранить их отдельно, так как они используются для разных целей. GET обычно используется для отображения, в то время как POST используется для целей администрирования, добавления / редактирования элементов, подтверждения выбора и т. Д.

Также может быть небольшая проблема безопасности: кто-то может захотеть открыть страницу, используя параметры GET и принудительно выполнить что-то вроде удаления данных - например, example.com/index.php?deleteid=123 (На самом деле это можно сделать с помощью POST из внешней HTML-формы, но гораздо реже. Любой может опубликовать ссылку на форуме, в блоге, где угодно.)

0 голосов
/ 09 июня 2009

Обычно считается, что лучше использовать $_GET и $_POST, а не $_REQUEST, потому что это ничего вам не стоит и закрывает небольшой набор манипуляций с сайтом. Я бы сделал поиск по конкретному источнику по крайней мере доступным в вашей среде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...