daltcore / ekko
用于标记导航项为激活状态的、不依赖框架的PHP包。
Requires
- php: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18
- illuminate/routing: ^9.0
- illuminate/support: ^9.0
- mockery/mockery: ^1.4
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.6
This package is not auto-updated.
Last update: 2024-09-12 15:36:04 UTC
README
用于标记导航项为激活状态的、不依赖框架的PHP包。
功能
- 不依赖框架。
- 可修改以适用于任何自定义应用程序和UI。
- 目前支持的框架:Laravel(欢迎Pull Requests!)。
- 全局辅助函数默认禁用。
- 支持默认输出值。
- 向下兼容。
- 通过表格驱动测试(PHPUnit中的数据提供者)全面测试。
安装
从命令行
composer require laravelista/ekko
默认情况下,Ekko使用以下合理的默认值初始化
- 默认输出值为
active
。 - 它使用GenericUrlProvider (
$_SERVER['REQUEST_URI']
)。 - 全局辅助函数已禁用。
Laravel
此包的唯一依赖是PHP ^8.0,这意味着您可以在支持PHP 8的任何Laravel版本上安装它(我认为目前这只能是Laravel 8)。服务提供者始终遵循最新的Laravel版本,并尽可能地保持向后兼容。
Laravel 8将使用自动发现功能来注册服务提供者和外观。
如果您不使用自动发现,则需要将服务提供者和外观包含在 config/app.php
文件中
'providers' => [
...,
Laravelista\Ekko\Frameworks\Laravel\ServiceProvider::class
];
并在同一文件的底部添加外观别名
'aliases' => [
...,
'Ekko' => Laravelista\Ekko\Frameworks\Laravel\Facade::class
];
概述
要在 Bootstrap 中标记菜单项为激活状态,您需要向 <li>
标签添加 active
CSS类
<ul class="nav navbar-nav"> <li class="active"><a href="/">Home</a></li> <li><a href="/about">About</a></li> </ul>
您可以使用Laravel手动完成此操作,但最终会得到一个香肠
<ul class="nav navbar-nav"> <li class="@if(URL::current() == URL::to('/')) active @endif"><a href="/">Home</a></li> <li><a href="/about">About</a></li> </ul>
使用Ekko,您的代码可能看起来像这样
<ul class="nav navbar-nav"> <li class="{{ Ekko::isActive('/') }}"><a href="/">Home</a></li> <li><a href="/about">About</a></li> </ul>
或这样
<ul class="nav navbar-nav"> <li class="{{ Ekko::isActiveRoute('home') }}"><a href="/">Home</a></li> <li><a href="/about">About</a></li> </ul>
或这样
<ul class="nav navbar-nav"> <li class="{{ $ekko->isActive('/') }}"><a href="/">Home</a></li> <li><a href="/about">About</a></li> </ul>
默认输出值
如果您不是使用Bootstrap,而是使用其他框架或自定义设计,那么您可以用Ekko返回任何您想要的内容,而不是返回 active
CSS类。
<ul class="nav navbar-nav"> <li class="{{ Ekko::isActive('/', 'highlight') }}"><a href="/">Home</a></li> <li><a href="/about">About</a></li> </ul>
您也可以设置 默认输出值,这样您就不必每次都输入它
$ekko = new Ekko; $ekko->setDefaultValue('highlight'); return $ekko->isActive('/');
或者在Laravel中,您可以在 config/ekko.php
文件中设置默认输出值
<?php return [ 'default_output' => 'highlight' ];
要发布Ekko的配置,请在Laravel中使用此命令
php artisan vendor:publish --provider="Laravelista\Ekko\Frameworks\Laravel\ServiceProvider"
使用布尔值 true
或 false
很方便,如果您需要根据您在布局视图中所在的页面显示某些内容
@if(Ekko::isActive('/about', true)) <p>Something that is only visible on the `about` page.</p> @endif
全局辅助函数
全局辅助函数 默认禁用。要启用它们,请使用 Ekko::enableGlobalHelpers();
或 $ekko->enableGlobalHelpers()
。
在Laravel中,请将以下代码添加到您的 app/Providers/AppServiceProvider.php
文件中的 register
方法
\Ekko::enableGlobalHelpers();
用法
当在框架外部使用时,此包只有一个主要的方法,即 isActive
。该函数接受一个 input
,可以是字符串或字符串数组,以及一个 output
,可以是任何内容。默认输出是 active
。
<li class="{{ $ekko->isActive('/') }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive(['/', '/home]) }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive(['/', '/home, '*home*']) }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive('/home*') }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive('/home*feature=slideshow*') }}"><a href="/">Home</a></li>
<li class="{{ $ekko->isActive('/index.php?page=*') }}"><a href="/">Home</a></li>
它支持字符串、数组、通配符和查询参数。
Laravel用法
使用外观 Ekko::
、resolve(Ekko::class)
或 app(Ekko::class)
获取Laravel启动实例。
Laravel附带一些特殊方法,用于命名路由和其他辅助方法。此外,这里还有很多与该包的v1版本向后兼容的方法。
方法
Ekko::isActive($input, $output = null)
这调用Ekko的主要方法isActive。如上所述。
Ekko::isActiveRoute($input, $output = null)
用于命名路由。支持数组和通配符。
Ekko::areActiveRoutes(array $input, $output = null)
用于命名路由数组。支持通配符。向下兼容。使用isActiveRoute
并传入相同的数组。
Ekko::isActiveURL($input, $output = null)
与 Ekko::isActive
相同。 向下兼容。使用 Ekko::isActive
并传入相同的输入。
Ekko::areActiveURLs(array $input, $output = null)
与 Ekko::isActiveURL
相同,但仅接受URL数组。向下兼容。使用 Ekko::isActive
并传入相同的数组。
Ekko::isActiveMatch($input, $output = null)
与 Ekko::isActive
相同。此方法将输入包裹在通配符 *
中。支持字符串、数组和通配符作为输入。向下兼容。使用 Ekko::isActive
并传入相同的输入,但在所需位置使用通配符 *
。
Ekko::areActiveMatches(array $input, $output = null)
与 Ekko::isActiveMatch
相同,但仅接受字符串数组。向下兼容。使用 Ekko::isActive
并传入相同的数组。
开发
# Install dependencies composer install # Run tests vendor/bin/phpunit # Run Psalm vendor/bin/psalm # Format code (php-cs-fixer) vendor/bin/php-cs-fixer
鸣谢
非常感谢
- @judgej 为路由通配符做出贡献。
- @Jono20201 为辅助函数做出贡献。
- @JasonMillward 为改进嵌套路由名称中的通配符做出贡献。
- @it-can 为Laravel 5.5+自动发现做出贡献。
- @foo99 为snake_case函数名做出贡献。
- @Turboveja 为are_active_matches函数做出贡献。
赞助商 & 支持者
我想向以下赞助商和支持者表示感谢,他们资助了我的开源之旅。如果您有兴趣成为赞助商或支持者,请访问支持者页面。
贡献
感谢您考虑为Ekko做出贡献!贡献指南可在此处找到。
行为准则
为了确保开源社区对所有成员都友好,请阅读并遵守行为准则。
许可
Ekko是开源软件,许可协议为MIT许可证。