从 Laravel 中的 url 获取最新的 slug
Posted
技术标签:
【中文标题】从 Laravel 中的 url 获取最新的 slug【英文标题】:Getting the lastest slug from url in Laravel 【发布时间】:2018-01-13 09:16:42 【问题描述】:这是我的路线:
Route::get('slug?/slug2?/slug3?', 'PageController@show');
这就是我在服务提供商中获得 slug 值的方式:
$this->app->request->route('slug2')
我的网址看起来像 base_url/slug
或 base_url/slug/slug2
或 base_url/slug/slug2/slug3
。无论我的网址如何,我都在寻找一种 laravel 方式来获取最新的 slug。有没有办法做到这一点 ?
谢谢
【问题讨论】:
我认为按照定义路线的方式,您需要获取当前 url,然后自己获取最后一部分。 @Andreas 我知道我的路线不是完美的解决方案。如果您知道更好的方法,请发布解决方案。谢谢很多:) 【参考方案1】:使用它,我可以从我的 url 中获取最新的 slug。但即使我必须改变路线,我仍在寻找更好的解决方案。这是代码:
use Illuminate\Support\Facades\Request;
....
Request::segment(count(Request::segments()))
【讨论】:
我认为这是获取 URL 中实际内容的最明智的方法。或者,如果您的路线是show($slug = null, $slug2 = null, $slug3 = null)
,您可以使用$lastSlug = ($slug3?:($slug2?:$slug?:null))
【参考方案2】:
你可以使用explode
$url = base_url/slug/slug2/slug3;
$slugs = explode ("/", $url);
$latestslug = $slugs [(count ($slugs) - 1)];
【讨论】:
随着爆炸,这是硬编码的方式,我正在寻找在 Laravel 中定义的方法或 smth 来做到这一点:) 使用公共函数 getRouteKey() return $this->slug; 后回()见laravel.com/docs/5.4/redirects【参考方案3】:虽然不是一个优雅的方法,但这可以工作
$has_valid_slug = count($request->route()->parametersWithoutNulls());
if ($has_valid_slug)
$last_slug_key = key(array_slice($request->route()->parametersWithoutNulls(),
-1, 1, TRUE ));
$last_slug = $request->route()->parametersWithoutNulls()[$last_slug_key];
https://laravel.com/api/5.4/Illuminate/Routing/Route.html#method_parametersWithoutNulls
【讨论】:
以上是关于从 Laravel 中的 url 获取最新的 slug的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 通过 Eager 加载获取 Join 表中的最新字段
在laravel 7刀片中获取带有if not null条件的URL参数