https://github.com/dwightwatson/sitemap - very useful utility, works with Laravel 4.*, 5.*.
Install:
composer require watson/sitemap
Add the service provider to your config/app.php file.
Watson\Sitemap\SitemapServiceProvider::class
Add the alias to the facade, also in config/app.php.
'Sitemap' => Watson\Sitemap\Facades\Sitemap::class
Usage example:
namespace App\Http\Controllers;
use App\Models\Categories;
use App\Models\Essays;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
use Watson\Sitemap\Sitemap;
/**
* Class SitemapController, generates and shows xml sitemap
*
* @package App\Http\Controllers
*/
class SitemapController
{
public function index() {
// init sitemap obj
$sitemap = new Sitemap(
Cache::store('file'),
new Request()
);
$essayModel = new Essays();
$categoryModel = new Categories();
$categoriesArr = $categoryModel->getAllPublishedCategories();
// add to sitemap all the categories
foreach ($categoriesArr as $categoryRes) {
$sitemap->addTag(
url(
"/" . config('custom.urlBases.essaysCategory')
. "/" . Str::slug($categoryRes->name, "-") . "-{$categoryRes->id}"
),
$categoryRes->cat_publication_time,
'daily',
'0.5'
);
}
$essaysArr = $essayModel->getAllEssays();
// add to sitemap all the essays
foreach ($essaysArr as $essay) {
$sitemap->addTag(
url(config('custom.urlBases.essayPage') . '/' . $essay->url . '-' . $essay->id),
$essay->publication_time,
'daily',
'0.5'
);
}
return $sitemap->render();
}
}
Returns content like next:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>page-url-here</loc>
<lastmod>2017-02-08T19:52:37+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>