TransWikia.com

Imprimir resultados de un controlador en una vista en Laravel

Stack Overflow en español Asked by Kn4 on November 20, 2021

Estoy comenzando a utilizar Laravel y aún no entiendo bien como imprimir en una vista los resultados que son retornados desde un controlador (el cual ejecuta un cálculo de dos variables y una constante).

El algoritmo consiste en enviar desde la vista calcular.blade.php los datos através de un formulario al controlador calculoController cuya función es calcularEntradas dónde se calculará dependiendo el caso las variables recibidas, al obtener el resultado las variables se imprimirán en la misma vista cacular.blade.php

Controlador: calculoController.php:

namespace AppHttpControllers;

use IlluminateHttpRequest;

class calculoController extends Controller
{
    public function calcularEntradas(Request $request)
    {
    $valor1 = $request->input("entrada1");
    $valor2 = $request->input("entrada2");
    $tipo   = $request->input("tipo_entrada");

switch ($tipo) {
  case "Calculo1":
    $resultado = $valor1 * 0.05 + $valor2;
    $tipo;
    break;
  case "Calculo2":
    $resultado = $valor1 * 0.085 + $valor2;
    $tipo;
    break;
  case "Calculo3":
    $resultado = $valor1 * 0.0986 + $valor2;
    $tipo;
    break;  
  case "Calculo4":
    $resultado = $valor1 * 0.135 + $valor2;
    $tipo;
    break;
    default:
    echo "";
     }
    return view('cacular', ['tipo' => $tipo, 'resultado' => $resultado']);
  }
}

Vista: views/calcular.blade.php

    <form action="{{route('enviar_datos')}}" method="POST" autocomplete="off" >
                @csrf
                <input type="radio" name="tipo_entrada" value="Calculo1" required>
                <input type="radio" name="tipo_entrada" value="Calculo2" required>        
                <input type="radio" name="tipo_entrada" value="Calculo3" required>
                <input type="radio" name="tipo_entrada" value="Calculo4" required>
                <input type="number" name="valor1" placeholder="Valor 1" required>
                <input type="number" name="valor2" placeholder="Valor 2" required>
                <button> Calcular </button>
    </form>
                <div class="label">
                El tipo de cálculo es: {{ $tipo }}
                El resultado es: {{ $resultado }} 
                </div>
    

Ruta: routes/web.php

      use IlluminateSupportFacadesRoute;

Route::get('/calculo', function () {
    return view('calcular');
});

Route::post('/calculo', 'calculoController@calcularEntradas')->name('enviar_datos');

No tengo muy claro como enviar los datos al controlador, imprimir el resultado a la vista desde el controlador y estructurar las rutas en Laravel.

Versión de PHP: 7.4
Versión de Laravel: 7
Plataforma: Heroku

Error obtenido:

Undefined variable: $resultado y $tipo

One Answer

Suponiendo que tu error sea por esto:

Deberías poner Request en el controlador

public function calcularEntradas(Request $request){}

y para retornar las variables a la vista normalmente yo las envio asi:

return view(calcular , [ 'variable1' => $tipo , 'variable2' =>$resultado ]);

luego en tu web.php

Route::post('/calculo', 'calculoController@calcularEntradas')->name('enviar_datos')

El name se usa para evitar usar toda la linea que ingresas en el route, y las puedes utilizar tanto en las vistas como en los controladores(esto es opcional) en tu caso seria (si la implementas):

<form action="{{route('enviar_datos')}}" method="POST">.......</form>

En la vista lo utilizar asi:

<span>el resultado es: {{$variable1}}</span>

o si quieres puedes cambiar el identificador variable1 por:

return view(calcular , [ 'tipo' => $tipo , 'resultado' =>$resultado ]);

y el resultado seria lo mismo:

<span>el resultado es: {{$tipo}}</span>

Answered by DAD on November 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP