laravelista / ekko
用于标记导航项活动的无框架PHP软件包。
Requires
- php: ^8.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18
- illuminate/routing: ^8.0
- illuminate/support: ^8.0
- mockery/mockery: ^1.4
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.6
README
用于标记导航项活动的无框架PHP软件包。
特性
- 无框架。
- 可修改以适用于任何自定义应用程序和UI。
- 当前支持的框架:Laravel(欢迎PR!)。
- 默认情况下禁用全局辅助函数。
- 支持默认输出值。
- 向下兼容。
- 使用表格驱动测试(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(https://bootstrap.ac.cn/components/#navbar)中标记菜单项为活动状态,需要将active
CSS类添加到<li>
标签中
<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 为蛇形函数名称做出贡献。
- @Turboveja 为 are_active_matches 函数做出贡献。
赞助商和资助者
我要向以下赞助商和资助者表示我的感谢,他们为我的开源之旅提供了资金。如果您有兴趣成为赞助商或资助者,请访问资助者页面。
贡献
感谢您考虑为 Ekko 做出贡献!贡献指南可在此处找到。
行为准则
为了确保开源社区对所有人均持欢迎态度,请阅读并遵守行为准则。
许可
Ekko 是在 MIT 许可证 下许可的开源软件。