dluwang / navigator
Navigator manager service
Requires
- tightenco/collect: 5.8.*
Requires (Dev)
- fzaninotto/faker: ^1.7
- kastengel/packdev: 1.3.*
- mockery/mockery: ^1.2
- phpunit/phpunit: ^7
README
This is a package that provide service to manage navigations
Note
Installation
composer require dluwang/navigation
Usage
Define Navigation
Dluwang/Navigator/Navigation
is a class to define your navigation. The __construct
method has two mandatory arguments and four optional arguments
public function __construct($id, $url, $order = 1, $parent = null, array $attributes = [], array $childs = [])
-
$id
is the id of the navigation -
$url
is the url of the navigation -
$order
is number for sorting the navigation -
$parent
is the parent of the navigation -
$attributes
is the additional attributes of navigation -
$childs
is the childs of navigation
All of the properties above can be accessed via the object instance.
Registering child
There are two ways to register navigation's child.
- Eager child registration
$navigation->registerChild($childNavigation) // single child registration` $navigation->registerChild([$childNavigation2, $childNavigation2]) // multiple childs registration
- Deferred child registration
Sometimes you want to hook navigation and register the child somewhere in your app. You just need to specify the parent argument with the navigation-id
you want to hook.
$navigation = new Navigation('navigation-id', 'the-url', 'the-order', 'the-parent-navigation-id');
Retrieveing all childs
$navigation->childs()
Retrievent child by id
$navigation->child('navigation-id-wanted')
Define Navigator
Dluwang/Navigator/BaseNavigator
is a class that act as the repository of Navigations. All Navigator implementation should implements Dluwang/Navigator/Navigator
interface.
$navigator = new BaseNavigator()
Constructor has one optional argument which is the navigations you want to register.
Registering navigations
$navigator->register($navigation) // single navigation registration
$navigator->register([$navigation1, $navigation2]) // mutiple navigations
As mentioned above, the deferred child can be registered casually to navigator.
Retrieve raw registered navigations
This package under the hood do some data preparation such as sorting and collect deferred childs. To get raw data you can use.
$navigator->raw();
To specify parent, use:
$navigator->raw('parent-id');
To get prepared data you can use the methods below.
Retrieve all navigations
$navigator->navigations()
You can specify the navigations loaded by their parent.
$navigator->navigations('parent-id');
Retrieve navigation by id
$navigator->navigation('navigation-id')
Integration
Currently, this package only integrated with laravel framework. You can register your defined navigation in you app service provider at the boot method. This integration add a caching mechanism when building navigation
public function boot() { // define navigation $navigation = ... $this->app->navigator->register($navigation); }
Tests
To run test, run this following command
vendor/bin/phpunit