PHP code example of n1215 / larabread

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()]);
    }
}


Route::get('home', 'AppController@home')->name('home');

Route::get('categories', 'CategoriesController@index')->name('categories.index');
Route::get('categories/{category}', 'CategoriesController@index')->name('categories.show');

Route::get('categories/{category}/posts', 'PostsController@index')->name('categories.posts.index');
Route::get('categories/{category}/posts/{post}', 'PostsController@show')->name('categories.posts.show');


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
blade
@php
    /**
     * @var \N1215\Larabread\BreadcrumbList $breadcrumbs
     * @var \N1215\Larabread\Breadcrumb $breadcrumb
     */
@endphp
@if (isset($breadcrumbs) && !$breadcrumbs->isEmpty())
    <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
            @foreach ($breadcrumbs as $breadcrumb)
                @if ($breadcrumb->getUrl() !== null && !$loop->last)
                    <li class="breadcrumb-item"><a href="{{ $breadcrumb->getUrl() }}">{{ $breadcrumb->getTitle() }}</a></li>
                @else
                    <li class="breadcrumb-item active">{{ $breadcrumb->getTitle() }}</li>
                @endif
            @endforeach
        </ol>
    </nav>
@endif
blade
@php
    /**
     * @var \N1215\Larabread\BreadcrumbList $breadcrumbs
     * @var \N1215\Larabread\Breadcrumb $breadcrumb
     */
@endphp
@if (isset($breadcrumbs) && !$breadcrumbs->isEmpty())
    <nav aria-label="breadcrumb">
        <ol class="breadcrumb">
            @foreach ($breadcrumbs as $breadcrumb)
                <img src="{{ $breadcrumb->getAttribute('icon', 'default.png') }}" alt="{{ $breadcrumb->getTitle() }}">
            @endforeach
        </ol>
    </nav>
@endif