https://github.com/adminarchitect/navigation
High configurable navigation builder based on providers.
https://github.com/adminarchitect/navigation
Last synced: 4 months ago
JSON representation
High configurable navigation builder based on providers.
- Host: GitHub
- URL: https://github.com/adminarchitect/navigation
- Owner: adminarchitect
- License: mit
- Created: 2016-10-31T12:44:09.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2017-10-24T13:12:56.000Z (over 8 years ago)
- Last Synced: 2025-05-30T14:50:18.351Z (about 1 year ago)
- Language: PHP
- Size: 59.6 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Navigation
Navigation is a Laravel based (AdminArchitect oriented) package to handle dynamic menus.
LinksProvider, RoutesProvider, EloquentProvider are provided out of the box.
# Caution
Note, that `adminarchitect/navigation` is based on [AdminArchitect](http://adminarchitect.com) package and won't work without it.
# Installation
```
composer require adminarchitect/navigation
```
Add following lines to your config/app.php
* add `Terranet\Navigation\ServiceProvider::class` line to `providers` array
* add `'Navigation' => Terranet\Navigation\Facade::class,` line to `aliases` array
Run:
```
php artisan vendor:publish --provider="Terranet\\Navigation\\ServiceProvider"
php artisan navigation:table
php artisan migrate
```
# Providers
Navigation is based on Providers, each of them can provide a collection of navigable items and should realize one of default contracts or maybe define new one.
* `LinksProvider`: Provides a way to add static links: url => title;
* `RoutesProvider`: Provides a way to add routes to menu;
* `EloquentProvider`: Provides a way to add Eloquent models to a navigable collection.
All usable providers are registered via config/navigation.php file -> `providers` array.
To create a new provider, run: `php artisan navigation `, then register it in config/navigation.php.
Any provider which extends EloquentProvider should provide a collection of items which implement NavigationItem contract.
NavigationItem requires implementation of 3 simple methods:
1. navigationKey => should return item unique key, usually `id`;
2. navigationTitle => should return item title, may be: `title`, `name`, whatever identifies a model title.
3. navigationUrl => should return item specific url, may return `url()` or `route(, )`
for instance, to allow adding `Posts` to a navigation you have to create a `PostsProvider`, then modify your `Post` model to look like in the following example:
```
php artisan navigation:provider PostsProvider
```
`Provider` command will generate `app\Http\Terranet\Administrator\Navigation\Providers\PostsProvider` class:
```
[
...
\App\Http\Terranet\Administrator\Navigation\Providers\PostsProvider::class,
...
]
```
Navigable Eloquent model should implement NavigationItem contract, so `App\Post` should be like:
```
class Post extends Model implements NavigationItem
{
protected $fillable = [
'user_id', 'title', 'slug', 'published', 'image',
];
public function navigationKey()
{
return $this->id;
}
public function navigationTitle()
{
return $this->title;
}
public function navigationUrl()
{
return route('posts.show', ['slug' => $this->slug]);
}
}
```
# Enjoy!