2010-09-27 2 views
2

Возможно ли отправить данные формы в метод класса PHP, а не в файл? Или я должен использовать AJAX для этого?Могу ли я использовать php-метод в действии формы?

Например, я могу иметь что-то вроде:

<form action="my_obj::form_submit" method="post">...</form> 
//rather than 
<form action="my_obj.php" method="post">...</form> 

Я не хочу, чтобы кто-нибудь в состоянии получить доступ ко всему файлу. Я не вижу проблемы с наличием единого общедоступного статического метода, который доступен, потому что один метод легко «затвердеть» для общего пользования. Существует функция AJAX, которая поможет мне сделать это, но я думаю, что быстрее не делать этого.

Благодаря

+5

Это невозможно и было бы ужасной, ужасной идеей. Это означало бы, что любой может отправить die() или что-то более гнусное и выполнить его непосредственно, просто изменив URL-адрес. –

+0

Спасибо, что сообщили мне. Я этого не понимал. – Tim

ответ

2

Нет, это не возможно, так как клиентский код не может никогда знать о таких деталях реализации на стороне сервера. Как замечает Чак Возе, если это было возможно, это серьезная ответственность за безопасность.

action атрибуты на <form> элементов, как <a href>, просто идентификаторы URI, так что вы не можете указать на какую-то определенную часть PHP коды и ожидать PHP, чтобы собрать все и запустить его. Опять же, это одна и та же проблема на стороне клиента/сервера.

Если вы не используете какую-либо маршрутизацию URL-адресов, как это предусмотрено многими фреймворками (на ответ на веб-сайт), вы не сможете пройти дальше, чем URI, указывающий на PHP-скрипт на вашем сайте.

0

Я бы попытался обработать его с помощью определенного запроса uri. Таким образом, вы можете проверить, задан ли ключ в переменной $_GET и загрузить класс с помощью определенного метода.

В противном случае знание заданного ключа в переменной $_POST позволит переслать процесс на метод, который вы хотите вызвать. Таким образом, нет особой необходимости в подаче такого вида формы.

0

Вы не можете сделать action="my_obj::form_submit", так как это даже не действительный URI. Однако вы можете сделать action="/my_obj/form_submit" и отобразить URI на /<object>/<method> Это подход, который используют многие среды MVC.

+0

Благодарим вас за предложение. К сожалению, это не делается с MVC. – Tim

+0

Нельзя использовать в MVC. Просто давал вам знать, что другие отображают URI для методов класса все время. – webbiedave

+0

Это интересно ... Я уже начал работу с AJAX. Я могу экспериментировать с этим в будущем проекте. – Tim

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