adminarchitect/navigation

此包的最新版本(v2.1)没有可用的许可证信息。

Admin Architect - 导航模块。该包提供了一种简单的方法来从/到数据库中构建和存储。

v2.1 2017-10-11 12:04 UTC

This package is not auto-updated.

Last update: 2024-09-15 02:02:49 UTC


README

Navigation是一个基于Laravel(AdminArchitect导向)的包,用于处理动态菜单。提供了LinksProvider、RoutesProvider和EloquentProvider。

注意

注意,adminarchitect/navigation基于AdminArchitect包,如果没有它将无法工作。

安装

composer require adminarchitect/navigation

将以下行添加到您的config/app.php文件中

  • providers数组中添加Terranet\Navigation\ServiceProvider::class
  • aliases数组中添加'Navigation' => Terranet\Navigation\Facade::class,

运行

php artisan vendor:publish --provider="Terranet\\Navigation\\ServiceProvider"
php artisan navigation:table
php artisan migrate

提供者

Navigation基于提供者,每个提供者都可以提供一组可导航项,并且应该实现一个默认合约或定义一个新的合约。

  • LinksProvider:提供了一种添加静态链接的方式:url => title;
  • RoutesProvider:提供了一种将路由添加到菜单的方式;
  • EloquentProvider:提供了一种将Eloquent模型添加到可导航集合的方式。

所有可用的提供者都通过config/navigation.php文件中的providers数组注册。

要创建一个新的提供者,运行:php artisan navigation <Name>,然后在config/navigation.php中注册它。

任何扩展EloquentProvider的提供者都应该提供一组实现NavigationItem合约的项目。NavigationItem需要实现3个简单方法

  1. navigationKey => 应返回项目的唯一键,通常是id
  2. navigationTitle => 应返回项目标题,可能是:titlename、任何标识模型标题的内容。
  3. navigationUrl => 应返回项目的特定URL,可能返回url(<url>)route(<name>, <params>)

例如,要允许将Posts添加到导航中,您必须创建一个PostsProvider,然后修改您的Post模型,如下所示

php artisan navigation:provider PostsProvider

Provider命令将生成app\Http\Terranet\Administrator\Navigation\Providers\PostsProvider

<?php

namespace App\Http\Terranet\Administrator\Navigation\Providers;

use Terranet\Navigation\Providers\EloquentProvider;

class PostsProvider extends EloquentProvider
{
    /**
     * Eloquent model.
     */
    protected $model;
}

现在您只需要提供一个有效的eloquent $model,例如App\Post

protected $model = \App\Post::class;

接下来,在config/navigation.php中注册它

'providers' => [
    ...
    \App\Http\Terranet\Administrator\Navigation\Providers\PostsProvider::class,
    ...
]

可导航的Eloquent模型应实现NavigationItem合约,因此App\Post应如下所示

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

享受吧!