2016-07-08 2 views
1

Ich bin neu im Laravel. Ich habe das nicht im Browser versucht, ich benutze Tests dafür.Punkt-Syntax und verschachtelte HTML-Formulare. Ich konnte keine Daten während des Tests abrufen

Ich habe Test, der wie folgt aussieht:

public function testStoreRequestValid() 
{ 
    $data = [ 
     'name' => 'New Item', 
     'parameter.count' => '3', 
     'parameter.0.parameter_id' => '4', 
     'parameter.0.value_id' => '', 
     'parameter.0.value' => 'text', 
     'parameter.1.parameter_id' => '1', 
     'parameter.1.value_id' => '2', 
     'parameter.1.value' => 'Yes', 
     'parameter.2.parameter_id' => '2', 
     'parameter.2.value_id' => '', 
     'parameter.2.value' => '10' 
    ]; 

    $response = $this->call('post', '/item', $data); 

    // ... 
} 

Wenn ich versuche, Daten zu holen mit:

$parameterCount = $request->input('parameter.count'); 

I Null-Wert (wenn ich Methode verwenden, hat es falsch bekommt).

Wenn ich versucht habe, eckige Klammern zu verwenden, habe ich die Ergebnisse, aber ich möchte, dass die API mit JSON auch ohne zu viel Hastle in der JS verwendbar ist.

Wie löse ich das am saubersten?

Antwort

2

Punkt in Laravel hat eine spezielle Bedeutung, so dass Sie nicht wirklich Arrays verwenden können, die Punkte in ihren Tasten haben. Sie sollten Ihre Daten wie folgt deklarieren:

<?php 
$data = []; 
array_set($data,'name','New Item');  
array_set($data,'parameter.count','3'); 
array_set($data,'parameter.0.parameter_id','4'); 
array_set($data,'parameter.0.value_id',''); 
array_set($data,'parameter.0.value','text'); 
array_set($data,'parameter.1.parameter_id','1'); 
array_set($data,'parameter.1.value_id','2'); 
array_set($data,'parameter.1.value','Yes'); 
array_set($data,'parameter.2.parameter_id','2'); 
array_set($data,'parameter.2.value_id',''); 
array_set($data,'parameter.2.value','10'); 
+0

Ich verstehe diesen Ansatz, aber wird Laravel solche Daten ähnlich behandeln, wenn sie per Postanforderung gesendet werden? [Dokumentation] (https://laravel.com/docs/5.2/validation#validating-arrays) sagt, es sollte funktionieren, aber das erklärt nicht, wie es funktionieren soll. Es ist so vage, dass ich raten muss. Erwartet es eckige Klammern oder Punkte? – yad

+0

Überprüfen Sie https://laravel.com/docs/5.1/requests#retrieving-input speziell dort, wo es erwähnt * Wenn Sie an Formularen mit Array-Eingaben arbeiten, können Sie die "Punkt" -Notation verwenden, um auf die Arrays zuzugreifen * – apokryfos

+0

Es funktioniert nicht in testet, wenn es so etwas wie ''parameter [count]' => '3'' gibt und versucht, es mit' $ request-> input (' parameter.count ') abzurufen 'es funktioniert nicht Ich bekomme _null_ wenn ich es probiert habe es. Edit: Es besteht nicht einmal die Validierung. – yad

Verwandte Themen