Laravel Blade Raw PHP El sistema de plantillas Blade en Laravel permite mezclar código PHP nativo con código Blade. Sin embargo, en ocasiones podemos necesitar utilizar código PHP puro en nuestras vistas de Blade. Para lograrlo, podemos utilizar la directiva `@php` seguida de `@endphp` para encapsular el código PHP. Por ejemplo, si queremos imprimir el valor de una variable PHP en nuestra vista de Blade, podemos hacerlo de la siguiente manera: “` @php $nombre = “Juan”; echo “Hola, ” . $nombre; @endphp “` Esto imprimirá “Hola, Juan” en nuestra vista. También podemos utilizar estructuras de control y otras funciones de PHP dentro de estas etiquetas `@php` y `@endphp`. Es importante mencionar que, si bien utilizar código PHP puro puede ser útil en algunas situaciones, se recomienda utilizar los componentes y directivas proporcionados por Blade siempre que sea posible, ya que nos permiten escribir un código más limpio y legible. Si tienes alguna pregunta relacionada con el uso de código PHP en Laravel Blade, no dudes en consultarnos. Estamos aquí para ayudarte.
Necesito ayuda poco convencional. Si bien esta no es la forma de usar la plantilla Blade en circunstancias normales, en este caso estoy creando gráficos que enviaré por correo electrónico. El JavaScript no funciona en los correos electrónicos. Estoy usando Laravel 5.8 wkhtmltopdf 2.14 y actualmente no es posible actualizarlo. Por lo tanto, mi última solución es la siguiente: estoy recopilando los datos y los estoy enviando como una matriz a la plantilla Blade. Allí quiero usar Chart.js y QuickChart para crear el gráfico y mostrar la imagen en el correo electrónico.
<script src="{{ resource_path('assets/js/Chart.js/Chart.min.js') }}"></script>
<link rel="stylesheet" href="{{ resource_path('assets/js/Chart.js/Chart.min.css') }}">
<div class="header">
<h2>Reporte</h2>
</div>
<body>
$valueYTD = array();
@foreach($reportData['downloadURL']['graph_YTD'] as $val)
@php
$valueYTD[] = $val;
@endphp
@endforeach
$month = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul","Ago","Sep","Oct","Nov","Dic"];
$chartConfig = [
"type" => "line",
"data" => [
"labels" => $month,
"datasets" => array([
"label" => "Usuarios",
"data" => $valueYTD,
"fill" => false,
"borderColor" => 'blue'
])
]
];
$graphURL = json_encode($chartConfig);
$chartUrl = 'https://quickchart.io/chart?w=400&h=200&c=' . $graphURL;
<img src="{{ $chartUrl }}">
</body>
El único problema que tengo es que $valueYTD
en la parte de $chartConfig
se mostrará como “variable no definida”. Lo mismo ocurre si lo declaro en el cuerpo de @php
como $valueYTD = $reportData['downloadURL']['graph_YTD']
, me dirá que $reportData
es una “variable no definida”. No sé cómo declarar las variables de la matriz en el cuerpo PHP en bruto de la plantilla Blade o cómo abordar esto de otra manera.
davy.ai
Para solucionar el problema con la variable
$valueYTD
que aparece como indefinida en el cuerpo de$chartConfig =
, puedes declararla antes del bucle@foreach
de esta manera:Esto inicializa la variable
$valueYTD
como un array vacío antes de agregar elementos a él en el bucle foreach.En cuanto al problema con la variable
$reportData
que está indefinida, debes asegurarte de que se pase correctamente a la plantilla de Blade desde el controlador o desde donde se esté llamando. Puedes hacer esto pasándola como una variable en la funciónview()
de esta manera:Esto pasará la variable
$reportData
a la plantilla de Blade como una variable que se puede acceder utilizando la sintaxis de array de esta manera: