php 在每条路线上都有{locale}的情况下,我的用于更改locale变量的链接(在我的菜单中)必须具有每条路线的权限参数,因此

ulmd4ohb  于 2022-10-30  发布在  PHP
关注(0)|答案(1)|浏览(64)

经过几个小时的研究,我最终自己创造了一个解决方案,它的工作,但我想你会笑。
有人有更好的主意吗?

@foreach(localization()->getSupportedLocales() as $key => $locale)
        <li class="nav-item lang">
          <a class="{{ (app()->getLocale() == $key) ? 'active' : '' }}" href=
          "@php 
              $url = url()->full();
              $url = explode("/", $url);
              $newUrl = '';
              $first = reset( $url );
              foreach($url as $urlKey => $value)
              {
                $slash = '/';
                if($urlKey == 0)
                  $slash = '/';
                else
                  $slash = '/';
                if($urlKey == 3)
                  $url[$urlKey] = $key;
                  if( !next( $url ) && $value != $first) {
                    $slash = '';
                  }
                $newUrl .=  $url[$urlKey].$slash;
              }

              echo($newUrl);

            @endphp">{{ strtoupper($key) }}</a>
        </li>
      @endforeach

由于我知道$locale变量总是位于url的第三个斜杠处,所以我很喜欢使用explode,并且得到了预期的结果,即一个变量url,其参数的随机数取决于当前路由。
但我觉得你会笑......对吧?
我试过这个代码,但是我需要:
1 -关于创建此函数的位置的建议
2 -一个更好的想法,以达到同样的结果?
提前谢谢大家!

xqnpmsa8

xqnpmsa81#

为路线添加名称如何,例如:

Route::get('/{locale}/dashboard')->name('dashboard');

然后添加locale的值,如果您想使用该路由:

@foreach(localization()->getSupportedLocale() as $key => $value)
    <a class="{{ app()->getLocale() == $key ? 'active' : '' }}" 
       href="{{ route('dashboard', ['locale' => $key]) }}">
    {{ strtoupper($key) }}
    </a>
@endforeach

因此这里的关键角色是route()帮助器,因为您可以将上的路由名称作为第一个参数传递,然后将路由中{}的值作为第二个参数传递。

相关问题