PHP Unconference Europe 2015

Lidando com XForms

» XForms define uma mudança com relação a formulários tradicionais que permite que sejam usados em uma variedade mais ampla de plataformas e browsers ou até mesmo em mídias não tradicionais tais como documentos PDF.

A primeira diferença chave nos XForms é como o formulário é enviado ao cliente. » XForms para autores de HTML contem uma descrição detalhada de como criar XForms. Para o propósito deste tutorial nós veremos apenas exemplos simples.

Exemplo #1 Um formulário XForms simples de busca

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Search</h:title>
 <model>
  <submission action="http://example.com/search"
              method="post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Find</label></input>
  <submit submission="s"><label>Go</label></submit>
 </h:p>
</h:body>
</h:html>

O formulário acima mostra uma caixa de entrada de texto (chamada q), e um botão de submit (envio). Quando o botão de submit é clicado, o formulário será enviado para a página referenciada por action.

Aqui é onde começa a parecer diferente do ponto de vista da sua aplicação web. Em um formulário HTML normal, a informação seria enviada como application/x-www-form-urlencoded, no mundo dos XForms, porém, essa informação é enviada no formato XML.

Se você está escolhendo trabalhar com XForms então você, provavelmente, quer aquela informação como XML. Nesse caso, procure em $HTTP_RAW_POST_DATA, onde você achará o documento XML gerado pelo navegador e que você pode passar para o seu engine XSLT ou parser favorito.

Se você não estiver interessado em formatação e só quer que sua informação seja carregada na variável tradicional $_POST, você pode encarregar o navegador do cliente para enviar como um application/x-www-form-urlencoded mudando o atributo method para urlencoded-post.

Exemplo #2 Usando um XForm para popular o $_POST

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Search</h:title>
 <model>
  <submission action="http://example.com/search"
              method="urlencoded-post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Find</label></input>
  <submit submission="s"><label>Go</label></submit>
 </h:p>
</h:body>
</h:html>

Nota: Até o término dessa edição, muitos navegadores não suportam XForms. Verifique a versão do seu navegador se os exemplos acima falharem.

add a note add a note

User Contributed Notes 3 notes

up
2
lphuberdeau at phpquebec dot org
10 years ago
Since HTTP_RAW_POST_DATA requires a configuration to be generated and is not enabled as a default value, you will probably have to use the PHP STDIN stream to get the raw data. It's probably better to use this method as the raw data will not be generated every time, even when not needed.

<?php
$fp
= fopen( "php://stdin", "r" );
$data = '';
while( !
feof( $fp ) )
   
$data .= fgets( $fp );
fclose( $fp );
?>
up
1
Darkener Daemon EX
8 years ago
"php://stdin" doesn't exist in my PHP version. I use the following code block instead :
<?php
if (!isset($HTTP_RAW_POST_DATA))
   
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
?>
up
-1
OrionI
9 years ago
FireFox has an XForms plugin that works with the latest nightly builds. Check out http://www.mozilla.org/projects/xforms/ for more info. For IE support, there's an ActiveX control from Novell (http://developer.novell.com/xforms/) and one from x-port.net (http://www.formsplayer.com/).

There's also a JavaScript-based one coming out called FormFaces which looks very promising, especially since there are no plugins required and it works in IE, FF, and Opera: http://www.formfaces.com/
To Top