Creare un file XML con Laravel

Per creare un file XML con Laravel, ad esempio un feed, è possibile utilizzare blade per farlo in maniera semplice e veloce.

Come prima cosa recuperiamo i dati con le eventuali relazioni di cui abbiamo bisogno:

$products = Product::with(['options'])
    ->where('is_published_web', true)
    ->get();

E poi possiamo già eseguire il render del nostro template e ricavare la stringa XML:

$xml = view('feed_directory.il_mio_feed', ['products' => $products])->render();

Questo codice andrà a interpretare il file il_mio_feed.blade.php, che andremo a creare in resources/views/feed_directory/.
All'interno possiamo utilizzare la sintassi di blade, come in una normale view:

<?xml version="1.0"?>
<ilmiofeed>
 <products>
  @foreach ($products as $product)
  <product>
   <title>{{ $product->title }}</title>
   <description>{{ $product->description }}</description>
   <media>
    @foreach ($product->getMedia('img') as $media)
       <image>{{ $media->getFullUrl() }}</image>
    @endforeach
   </media>
  </product>
  @endforeach
 </products>
</ilmiofeed>

Ora è possibile salvare il file

// Creo la directory se non esiste
// In questo caso voglio salvarlo nella directory xml/ raggiungibile dal sito pubblico
$xmlDirectory = public_path('xml');
if (!File::exists($xmlDirectory)) {
    File::makeDirectory($xmlDirectory, 0755, true);
}

// Imposto il nome e path del file
$filename = 'il_mio_feed.xml';
$filePath = $xmlDirectory . '/' . $filename;

// Salvataggio del file
File::put($filePath, $xml);

 

 

 

 


Commenti