dluwang / navigator
Navigator manager service
Installs: 4
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/dluwang/navigator
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
| Laravel Version | Package Version |
|---|---|
| 5.5 | 1.0.* |
| 5.6 | 1.1.* |
| 5.7 | 1.2.* |
| 5.8 | 1.3.* |
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 = [])
-
$idis the id of the navigation -
$urlis the url of the navigation -
$orderis number for sorting the navigation -
$parentis the parent of the navigation -
$attributesis the additional attributes of navigation -
$childsis 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