Perl Dancer: получение данных из форм

Я новичок в Perl и хотел бы знать:

  • Как я могу использовать данные из HTML-форм с Perl Dancer?

Я борюсь со следующим примером. У меня есть форма на моем index.tt файл как это:

 <form action="/hello/:username" method="get" name="">
        <h3>Please log in </h3>
          <input type="text" name="username" required=""/>
          <input type="password" name="senha" required=""/>               
          <button name="Submit" value="Login" type="Submit">Login</button>              
    </form>     

Я хотел бы использовать имя пользователя из формы и создать страницу, которая возвращает введенную информацию. Итак, я проверил этот учебник, и я сделал следующее в моем Proyecto.pm:

package Proyecto;
use Dancer ':syntax';
our $VERSION = '0.1';    


get '/' => sub {
template 'index';
};

get '/hello/:username' => sub {
my $username= params('username');
return "Hola $username";
};

Но это не работает. Ребята, вы знаете, чего здесь не хватает? Спасибо!

1 ответ

Решение
<form action="/hello/:username" method="get" name="">

позвоню точно /hello/:username без и замены. HTML не может магически заменить части исходного кода - независимо от того, использует ли серверная программа Dancer или что-то еще. (JavaScript может сделать это.)

get '/hello/:username' => sub {

соответствует всем вызовам /hello/ сопровождаемый любой строкой, как /hello/chungel, /hello/Larry или же /hello/:username, последний установит значение username в param('username'),

Вы также добавили поле формы с name="username" который заканчивается двумя значениями для одного ключа (одно из URL, одно из формы).

Наконец: используйте фиксированный URL в качестве действия формы:

<form action="/hello" method="get" name="">

а также

get '/hello' => sub {

Передача имени пользователя в виде значения HTML-формы (и HTTP-аргумента) здесь не дает никаких преимуществ.

Если вы действительно хотите, чтобы имя пользователя было в URL-адресе, сначала используйте другое имя в определении маршрута:

get '/hello/:url_username' => sub {
    return param('url_username');

Затем вам нужно либо переписать действие формы с помощью JavaScript, либо переписать целевой URL с помощью Dancer before крюк

Другие вопросы по тегам