Accedere ai valori POST di un form

Buongiorno a tutti,

sono nuovo da queste parti e sto "sperimentando" con lo Zend FrameWork (1.6).

Vengo subito al mio problema: non riesco ad accedere ai dati inviati da un form dall'interno di un controller.. che non è proprio una cosa da poco.. :-)

All'interno dell'action del controller, ho inserito il seguente codice:

$request  = $this->getRequest();
$SiteName= $request->getPost('SiteName');

... ma la variabile $SiteNamenon viene mai valorizzata.

Se voglio accedere, invece, a dei dati con il metodo GET, nessun problema:

$IdPage = $this->getRequest()->getParam('IdPage');   

Usando:

if ($request->IsPost())
          echo "POST!";
       else
          echo "x!xxx!!!!!";

il test fallisce... :-(

Ho controllato che il form html generato sia corretto, che sia settato il metodo, che i nomi dei campi siano corretti ecc..... ma nulla da fare.

La cosa che non mi torna è che non riesco ad accedere ai valori nemmeno con:

$SiteName= $_POST["SiteName"];

.. che dovrebbe funzionare sempre... o no?

Se l'action del form la direziono non al controller/action ma ad una pagina di prova:

<?php
echo $_POST["SiteName"];
?>

il tutto funziona.

C'è qualcosa che mi sta sfuggendo (probabile)? Suggerimenti?

Grazie per l'attenzione,

Davide

inviato 8 anni fa
Orix
Orix
1
modificato 8 anni fa
X 0 X

prova a fare un var_dump($request) per vedere cosa c'è dentro

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Salve,

allora, questo codice:

       $request  = $this->getRequest();

       var_dump($request);

mi ritorna questo:

object(Zend_Controller_Request_Http)[7]
  protected '_paramSources' => 
    array
      0 => string '_GET' (length=4)
      1 => string '_POST' (length=5)
  protected '_requestUri' => string '/Links/insert' (length=13)
  protected '_baseUrl' => string '' (length=0)
  protected '_basePath' => null
  protected '_pathInfo' => string '/Links/insert' (length=13)
  protected '_params' => 
    array
      'controller' => string 'Links' (length=5)
      'action' => string 'insert' (length=6)
      'module' => string 'default' (length=7)
  protected '_aliases' => 
    array
      empty
  protected '_dispatched' => boolean true
  protected '_module' => string 'default' (length=7)
  protected '_moduleKey' => string 'module' (length=6)
  protected '_controller' => string 'Links' (length=5)
  protected '_controllerKey' => string 'controller' (length=10)
  protected '_action' => string 'insert' (length=6)
  protected '_actionKey' => string 'action' (length=6)

... quindi nella request qualcosa c'è..... ma perchè non riesco ad accedere ai valori del POST....

grazie,

davide

risposto 8 anni fa
Orix
Orix
1
X 0 X

Le modalità di lettura dei dati dalla Request sono descritte qui:

http://framework.zend.com/manual/en/zend.controller.request.html#zend.controller.request.http.dataacess

E' possibile accedere rirettamente ad un parametro, come se fosse un attributo della classe Request:

$request->nome_parametro

In questo caso l'orine di precedenza tra le variabili superglobali è 1. GET, 2. POST, 3. COOKIE, 4. SERVER, 5. ENV

Se invece si vuole accedere ad un particolare parametro di $_GET o $_POST

$request->getPost('nome_parametro'); // legge dalla $_POST

$request->getQuery('nome_parametro'); // legge dalla $_GET

Un ulteriore metodo per recuperare i dati si basa sull'utilizzo di $request->getParam('nome_parametro') che attinge da diverse fonti (vedi il link alla documentazione che ti ho riportato)

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Salve,

grazie per le info, ma ho utilizzato proprio le metodologie da te proposte per accedere ai dati del POST... niente da fare, non riesco a prendere i valori passati dai campi....

Ho fatto un ulteriore test per aver più chiaro il "giro":

echo "Method:".$request->getMethod()."<br/>";

che mi ritorna un: GET anche se nel method del form ho messo post...

Ecco il codice del form:

<form name="FormLink" action="/Links/insert" method="post">
....

<input type="text" name="SiteName" id="SiteName" value=""/ size="50" maxlength="50"/>

...

<input name="submit" type="submit"  value="Invia link">

</form>

L'action corrisponde all'action Insert del controller Links, action nella quale ho messo il codice per recuperare i valori dei dati:

$request  = $this->getRequest();
$name = $request->getPost('SiteName');

... mi sembra tutto molto lineare... eppure.... non vorrei aver fatto qualche erroraccio banalissimo.... ma non ne vengo proprio fuori... :-(

saluti,

Davide

risposto 8 anni fa
Orix
Orix
1
X 0 X

All'interno della Action prova a fare un var_dump di $this->_getAllParams();

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
var_dump($this->_getAllParams());

Mi ritorna:

array
  'controller' => string 'links' (length=5)
  'action' => string 'insert' (length=6)
  'module' => string 'default' (length=7)

... mi sembra corretto....

risposto 8 anni fa
Orix
Orix
1
X 0 X

Hai fatto il submit da form?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Si.

risposto 8 anni fa
Orix
Orix
1
X 0 X

Allora dovevano uscire anche i valori dei campi del form...  >:(

Non so che altro farti provare...

 :giveup:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

 :'(

... appena trovo l'erroraccio che faccio, lo posto qua.... sicuramente sarà qualche svista.... spero!

grazie per l'help,

davide

risposto 8 anni fa
Orix
Orix
1
X 0 X

..ecco... trovato l'erroraccio: configurazione nel htaccess....

RewriteEngine on #RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php RewriteRule ^MioSito/([^/]+)/([^/]+).html http://www.miosito.com/Pages/Show/IdPage/$1

Avevo commentato la riga dell'htaccess che direzionava tutto al file di bootstrap...  furbo, io! :crazy:

Ovviamente riattivando, tutto funge....

Domanda: come ci si comporta in questo caso? Ho la necessità di gestire il nome dei link per i motori di ricerca in modo da renderli più "amichevoli".....

saluti,

davide

risposto 8 anni fa
Orix
Orix
1
X 0 X

quell'htaccess non mi sembra lo standard dello ZF, vero? Gli URL utilizzati dallo ZF sono già SEF infatti hanno tutti i parametri gestitit attraverso una alberatura /chiave/valore

Comunque puoi personalizzare completamente gli URL specificando nel file di bootstrap delle regole di routing per il front controller

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda