1. Go to this page and download the library: Download n1215/larabread library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
n1215 / larabread example snippets
declare(strict_types=1);
namespace App\Http\Controllers;
use Illuminate\Contracts\View\View;
use N1215\Larabread\BreadcrumbListFactory;
class AppController
{
public function page(BreadcrumbListFactory $factory): View
{
// create BreadcrumbList instance with BreadcrumbListFactory::make() and BreadcrumbList::add() method
$breadcrumbs = $factory->make()
->add('Home', '/')
->add('Path', '/path')
->add('To', '/path/to')
->add('Page', '/path/to/page');
// pass BreadcrumbList to a blade template. the variable name should be 'breadcrumbs'
return view('page', compact('breadcrumbs'));
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use N1215\Larabread\BreadcrumbList;
use N1215\Larabread\BreadcrumbListFactory;
class AppTrail
{
/**
* @var BreadcrumbListFactory
*/
private $factory;
// inject BreadcrumbListFactory
public function __construct(BreadcrumbListFactory $factory)
{
$this->factory = $factory;
}
// create method which returns BreadcrumbList
public function page(): BreadcrumbList
{
return $this->factory->make()
->add('Home', '/')
->add('Path', '/path')
->add('To', '/path/to')
->add('Page', '/path/to/page');
}
}
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Http\Breadcrumbs\AppTrail;
use Illuminate\Contracts\View\View;
class AppController
{
// inject AppTrail
public function page(AppTrail $trail): View
{
$breadcrumbs = $trail->page();
return view('page', compact('breadcrumbs'));
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use N1215\Larabread\BreadcrumbList;
use N1215\Larabread\BreadcrumbListFactory;
class AppTrail
{
/**
* @var BreadcrumbListFactory
*/
private $factory;
public function __construct(BreadcrumbListFactory $factory)
{
$this->factory = $factory;
}
public function home(): BreadcrumbList
{
return $this->factory->make()->add('Home', '/');
}
public function path(): BreadcrumbList
{
// you can reuse other BreadcrumbList as a parent
return $this->home()->add('Path', '/path');
}
public function to(): BreadcrumbList
{
return $this->path()->add('To', '/path/to');
}
public function page(): BreadcrumbList
{
return $this->to()->add('Page', '/path/to/page');
}
}
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Http\Breadcrumbs\AppTrail;
use Illuminate\Contracts\View\View;
class AppController
{
/**
* @var AppTrail
*/
private $trail;
public function __construct(AppTrail $trail)
{
$this->trail = $trail;
}
public function home(): View
{
return view('home', ['breadcrumbs' => $this->trail->home()]);
}
public function path(): View
{
return view('path', ['breadcrumbs' => $this->trail->path()]);
}
public function to(): View
{
return view('to', ['breadcrumbs' => $this->trail->to()]);
}
public function page(): View
{
return view('to', ['breadcrumbs' => $this->trail->page()]);
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use N1215\Larabread\BreadcrumbList;
use N1215\Larabread\BreadcrumbListFactory;
class HomeTrail
{
/**
* @var BreadcrumbListFactory
*/
private $factory;
public function __construct(BreadcrumbListFactory $factory)
{
$this->factory = $factory;
}
public function home(): BreadcrumbList
{
return $this->factory->make()->add('Home', '/');
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use N1215\Larabread\BreadcrumbList;
class PathTrail
{
/**
* @var HomeTrail
*/
private $from;
// inject HomeTrail in the constructor
public function __construct(HomeTrail $from)
{
$this->from = $from;
}
public function path(): BreadcrumbList
{
return $this->from->home()->add('Path', '/path');
}
}
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Http\Breadcrumbs\HomeTrail;
use App\Http\Breadcrumbs\PathTrail;
use Illuminate\Contracts\View\View;
class AppController
{
public function home(HomeTrail $trail): View
{
return view('home', ['breadcrumbs' => $trail->home()]);
}
public function path(PathTrail $trail): View
{
return view('path', ['breadcrumbs' => $trail->path()]);
}
}
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
/**
* Blog Post
* @property int $id
* @property int $category_id
* @property string $title
* @property string $body
* @property-read Category $category
*/
class Post extends Model
{
public function category(): BelongsTo
{
return $this->belongsTo(Category::class);
}
}
declare(strict_types=1);
namespace App\Models;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
/**
* Blog Category
* @property int $id
* @property string $title
* @property-read Collection<Post> $posts
*/
class Category extends Model
{
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use N1215\Larabread\BreadcrumbList;
use N1215\Larabread\BreadcrumbListFactory;
class HomeTrail
{
/**
* @var BreadcrumbListFactory
*/
private $factory;
public function __construct(BreadcrumbListFactory $factory)
{
$this->factory = $factory;
}
public function home(): BreadcrumbList
{
return $this->factory->make()->add('Home', '/');
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use App\Models\Category;
use N1215\Larabread\BreadcrumbList;
class CategoriesTrail
{
/**
* @var HomeTrail
*/
private $from;
public function __construct(HomeTrail $from)
{
$this->from = $from;
}
public function index(): BreadcrumbList
{
return $this->from->home()
->add('Categories', route('categories.index'));
}
// any parameters can be passed to Trail methods
public function show(Category $category): BreadcrumbList
{
return $this->index()
->add($category->title, route('categories.show', ['category' => $category->id]));
}
}
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use App\Models\Category;
use App\Models\Post;
use N1215\Larabread\BreadcrumbList;
class PostsTrail
{
/**
* @var CategoriesTrail
*/
private $from;
public function __construct(CategoriesTrail $from)
{
$this->from = $from;
}
public function index(Category $category): BreadcrumbList
{
return $this->from->show($category)
->add('Posts', route('categories.posts.index'));
}
public function show(Post $post): BreadcrumbList
{
return $this->index($post->category)
->add($post->title, route('categories.posts.show', ['category' => $post->category_id, 'post' => $post->id]));
}
}
declare(strict_types=1);
namespace App\Http\Controllers;
use App\Http\Breadcrumbs\PostsTrail;
use App\Models\Category;
use App\Models\Post;
use Illuminate\Contracts\View\View;
use N1215\Larabread\BreadcrumbManager;
use N1215\Larabread\Facades\Breadcrumbs;
class PostsController
{
/**
* @var PostsTrail
*/
private $postsTrail;
public function __construct(PostsTrail $postsTrail)
{
$this->postsTrail = $postsTrail;
}
public function index(int $categoryId): View
{
/** @var Category $category */
$category = Category::query()->findOrFail($categoryId);
$posts = $category->posts;
$breadcrumbs = $this->postsTrail->index($category);
return view('categories.index', compact('category', 'posts', 'breadcrumbs'));
}
public function show(int $categoryId, int $postId, PostsTrail $postsTrail, BreadcrumbManager $breadcrumbManager): View
{
/** @var Post $post */
$post = Post::query()->where('category_id', $categoryId)->findOrFail($postId);
// (1) make a BreadcrumbList instance from an injected instance of Trail class
$breadcrumbs = $postsTrail->show($post);
// (2) make a BreadcrumbLIst instance from an injected instance of BreadcrumbManager
$breadcrumbs = $breadcrumbManager->make([PostsTrail::class, 'show'], $post);
// (3) make a BreadcrumbList instance from Facade
$breadcrumbs = Breadcrumbs::make([PostsTrail::class, 'show'], $post);
// (4) make a BreadcrumbList instance from helper function
$breadcrumbs = breadcrumbs()->make([PostsTrail::class, 'show'], $post);
return view('categories.index', compact('post', 'breadcrumbs'));
}
}
return [
// view variable name
'variable_name' => 'breadcrumbs',
// inject breadcrumbs into these blade templates via view composer
'templates' => [
'default' => 'elements.breadcrumbs', // change here
],
];
declare(strict_types=1);
namespace App\Http\Breadcrumbs;
use N1215\Larabread\BreadcrumbList;
class PathTrail
{
/**
* @var HomeTrail
*/
private $from;
public function __construct(HomeTrail $from)
{
$this->from = $from;
}
public function path(): BreadcrumbList
{
return $this->from->home()->add('Path', '/path', ['icon' => 'https://example.com/path.png']);
}
}
sh
php artisan vendor:publish --tag=larabread-config