Form post e action

ciao a tutti premesso che sono alle prime armi con questo framework e sono veramente negato, sto riscontrando delle difficoltà nel passare valori da una form all’altra
nel dettaglio ho questa form

<?= Html::label('Modello', 'modl', ['class' => 'control-label']) ?> <?= Html::textInput("Modello",$value , ['id' => 'modello', 'class' => 'form-control']) ?>
<p>
</p>
 <?= Html::label('Tessuto', 'modl', ['class' => 'control-label']) ?>
 <?= Html::textInput("Tessuto", $value, ['id' => 'tessuto', 'class' => 'form-control']) ?>
<p>
</p>
 <?= Html::label('Colore', 'modl', ['class' => 'control-label']) ?>
 <?= Html::textInput("Colore", $value, ['id' => 'color', 'class' => 'form-control']) ?>
  <p>
</p>  
<?= Html::a('Go',['/Start_2'], ['class' => 'btn btn-primary']) ?>

nel controller ho messo questa azione
public function actionStart_2($bc,$md,$cl,$ts,$mg ){
return $this->render(‘start_2’, [“bc” => $cercab,“md” => $md,“cl” => $cl,“te” => $ts,“mg”=>$mg]);
}

la mia domanda è come metto nell’azione di prendere i valori del post?
grazie

L’ActiveForm di base (se non modifichi i parametri di istanza del widget) invia i dati in POST, mentre tu, leggendoli dai parametri della actionStart li stai recuperando da una GET.

Quindi actionStart dovrebbe essere:

public function actionStart()
{
    $model = new TuoModel();

    $model->load(\Yii::$app->request->get());

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        // Salvataggi completato
    }

    return $this->render('start', [
        'model' => $model,
    ]);
}

Comunque se usi gii e provi a creare le CRUD, vedrai che ti crea un codice simile a quello che ti ho postato.

ciao Fabrizio grazie per la risposta , ma in pratica io non devo salvare nulla devo solo passare i valori dalla pagina start_1 a start_2 dove poi la pagina start_2 in base ai valori ricevuti elabora una griglia.
scusa ma sono veramente una schiappa :slight_smile:

Puoi postare il codice completo della vista? Manca la definizione del form.

In ogni caso io farei una azione sola, definendo un modello generico (estendendo yii\base\Model oppure creando un DynamicModel), così hai tutte le utilità di validazione di Yii. Se la load() del modello va a buon fine allora elabori la griglia. Il concetto è sostanzialmente lo stesso delle actionUpdate o actionCreate generate automaticamente, solo che poi invece della save() mostri il tuo secondo form.

Ciao Maxxer eccolo
<?php /*

<?= Html::beginForm(['preview', 'type'=>0, 'start'=>'start', 'end'=>'end'], 'post', ['enctype' => 'multipart/form-data']) ?> <?= Html::endForm() ?>
  * */?>
  <?php $form = ActiveForm::begin([
    'id'=>'sdata'  
    ]); ?>
<?php echo Quagga::widget( ); ?>

</p>
<?php echo Html::hiddenInput('magazzino', $magazzino);// echo $this->render('_search', ['model' => $searchModel]); ?> <?= Html::label('Modello', 'modl', ['class' => 'control-label']) ?> <?= Html::textInput("Modello",$value , ['id' => 'modello', 'class' => 'form-control']) ?>
<p>
</p>
 <?= Html::label('Tessuto', 'modl', ['class' => 'control-label']) ?>
 <?= Html::textInput("Tessuto", $value, ['id' => 'tessuto', 'class' => 'form-control']) ?>
<p>
</p>
 <?= Html::label('Colore', 'modl', ['class' => 'control-label']) ?>
 <?= Html::textInput("Colore", $value, ['id' => 'color', 'class' => 'form-control']) ?>
  <p>
</p>  


         <?= Html::submitButton('Go',['Start_2'], ['class' => 'btn btn-success']) ?>
<?= Html::a('label', ['/tabmagazzini/start_2'], ['class'=>'btn btn-primary']) ?>
  <?php $form = ActiveForm::end(); ?>

Per favore impagina a usare il markdown del forum, ora come ora i tuoi post sono complicati da leggere :sweat_smile:

questo è sicuramente sbagliato, non so che effetti possa avere. Magari niente ma la end() non va assegnata.

Per il resto il tuo form è in POST quindi nel controller fai la load(Yii::$app->request->post()) del modello e dovresti avere i dati.

Grazie maxxer ma ci deve essere qualcosa che mi sfugge
nel controller ho

public function actionStart_2( ){
$model = new Tabmagazzini();
$request = load(Yii::$app->request->post());
$post = $request->post();
$params = $request->bodyParams;
$bc=$_POST[“livestream_scanner”];
// $request->post(‘scanner_input’);
$md=$_POST[“modello”];
//$request->post(‘modello’);
$cl=$_POST[“color”];
// $request->post(‘color’);
$ts=$_POST[“tessuto”];
// $request->post(‘tessuto’);
$mg=$_POST[“magazzino”];
// $request->post(‘tessuto’) ;
return $this->render(‘start_2’, [“bc” => $bc,“md” => $md,“cl” => $cl,“te” => $ts,“mg”=>$mg,“params”=>$params]);
}

ma mi va in errore

Error

Call to undefined function app\controllers\load()

sicuramente ho scritto una grossa stupidaggine ma non riesco a capire dove

Lavorando così stai un po’ snaturando il framework. Gli assegnamenti tramite $_POST non hanno senso se usi i modelli, che hanno anche il vantaggio di facilitarti la validazione dei dati. La load a cui faccio riferimento è questa, quindi la devi chiamare come metodo del modello.

Vedi com’è fatto il controller generato dal CRUD