从 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/slugbase_url/slug/slug2base_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 中的一列获取最新记录?

在laravel 7刀片中获取带有if not null条件的URL参数

如何在 Blade 模板(Laravel v8)中获取 url 参数

无法从 URL Laravel 获取 ID

Laravel 5 从 URL 获取 ID