关于导航栏标签 active 的问题,if_uri_pattern () 这个方法应该怎么使用?

想用 active_class() 函数给链接中带 ‘resource’ 单词的 li 标签加 active,但是 if_uri_pattern(‘resource’) 并不生效。

url是这样的:http://xxxx.test/resource/cities

<li class="nav-item {{ active_class(if_uri_pattern('resource')) }}">
    <a class="nav-link" href="{{ route('cities.index') }}">资源信息</a>
</li>

上面的写法没有效果,下面这样写可以生效但我希望可以模糊匹配。

<li class="nav-item {{ active_class(if_route('cities.index')) }}">
    <a class="nav-link" href="{{ route('cities.index') }}">资源信息</a>
</li>

在网上只找到了 if_route ()if_route_param () 的用法,求指导。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

看了下if_uri_pattern方法的定义,想要匹配uri为resource/开头且后面是任意字符(可以为0个字符),应该这样:
if_uri_pattern('resource/*')

if_uri_pattern('resource')这个匹配只能是精确匹配到uri为resource。
附进行匹配的相关源代码:

// 如果是完全相等,直接通过
if ($pattern == $value) {
    return true;
}
// 转义正则表达式特殊字符,包括#号
$pattern = preg_quote($pattern, '#');

// 把星号转为正则表达式的0至多个任意字符的匹配(.*)
$pattern = str_replace('\*', '.*', $pattern);
// 进行正则匹配
if (preg_match('#^'.$pattern.'\z#u', $value) === 1) {
    return true;
}
4年前 评论
nemo95 (楼主) 4年前
讨论数量: 1

看了下if_uri_pattern方法的定义,想要匹配uri为resource/开头且后面是任意字符(可以为0个字符),应该这样:
if_uri_pattern('resource/*')

if_uri_pattern('resource')这个匹配只能是精确匹配到uri为resource。
附进行匹配的相关源代码:

// 如果是完全相等,直接通过
if ($pattern == $value) {
    return true;
}
// 转义正则表达式特殊字符,包括#号
$pattern = preg_quote($pattern, '#');

// 把星号转为正则表达式的0至多个任意字符的匹配(.*)
$pattern = str_replace('\*', '.*', $pattern);
// 进行正则匹配
if (preg_match('#^'.$pattern.'\z#u', $value) === 1) {
    return true;
}
4年前 评论
nemo95 (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!