martinbean / laravel-menu-builder
适用于 Laravel 5.x 的菜单构建器包。
Requires
- illuminate/support: ~5.0
This package is auto-updated.
Last update: 2024-09-20 21:23:04 UTC
README
一个简单的 Laravel 5.x 菜单构建器包
安装
Composer
此包可以通过 Composer 安装。从命令行运行以下命令
$ composer require martinbean/laravel-menu-builder
用法
菜单构建器由两个模型组成:Menu
和 MenuItem
。一个 Menu
有多个 MenuItem
实例,而一个 MenuItem
会将其自身转换为你的应用程序中的模型。因此,你需要做一些链接才能使菜单构建器正常工作。
假设你有一个 Page
模型。你需要像这样实现 Navigatable
接口
<?php namespace App; use Illuminate\Database\Eloquent\Model; use MartinBean\MenuBuilder\Contracts\Navigatable as NavigatableContract; class Page extends Model implements NavigatableContract { protected $table = 'pages'; }
添加接口意味着你需要在你的模型类上实现两个方法。这两个方法是 getTitle()
和 getUrl()
。
在你的理论上的 Page
模型中,可以这样实现
<?php namespace App; use Illuminate\Database\Eloquent\Model; use MartinBean\MenuBuilder\Contracts\Navigatable as NavigatableContract; class Page extends Model implements NavigatableContract { protected $table = 'pages'; public function getTitle() { return $this->title; } public function getUrl() { return route('page.show', [$this->slug]); } }
对于 getTitle()
,我们只是返回模型 title
属性的值;对于 getUrl()
,我们使用 Laravel 的 route()
助手返回一个路由。
该接口意味着你可以将任何现有的模型变成菜单项,只要它们公开标题和 URL。这使得菜单构建器非常灵活,类似于 WordPress(这个包受到了其启发)中的菜单项可以是帖子、页面、分类等。
渲染菜单
菜单的渲染是通过呈现器类完成的。这意味着你可以通过创建新的呈现器来更改菜单的渲染方式。
开箱即用,该包包含一个 UnorderedListPresenter
类。正如其名称所示,它将菜单渲染为一个普通的 HTML 无序列表(<ul>
)元素。
你可以创建自己的呈现器:你所需要做的就是实现 Presenter
合约,这将强制你实现三个方法
render()
hasItems()
getItems()
你的呈现器也应该有一个构造函数,它接受一个 Menu
实例作为参数。
请查看 UnorderedListPresenter
类的源代码以获取实现这些方法的示例。
在模板中显示菜单
Menu
模型被添加到 Laravel 的容器中,并通过外观公开,使其在模板中可用。要渲染菜单,你可以简单地调用
{!! Menu::build(1) !!}
其中第一个参数是你想要渲染的菜单的 ID(主键值)。还有一个可选的第二个参数,它是你想要使用的呈现器类,如果你不想使用默认的 UnorderedListPresenter
类。
CRUD
你还需要实现自己的 CRUD 程序来构建菜单。
问题
如果你对这个包有任何问题,请创建一个 新问题。
许可
在 MIT 许可证 下许可。