如何在laravel中创建创建欺骗网址或类似的东西

时间:2017-09-03 12:41:45

标签: php laravel

我正在尝试创建动态网址:

<li><a href="{{url("test/$test->id")}}">{{$test->test_name}}</a></li>

这样就可以像我这样悬停给我结果:

test/1
test/2
test/3

而我想要这样的东西

test/abc
test/def
test/xyz

但想要在id的基础上获取数据,那么如何使用id获取数据,但是在url上显示lasomething其他

路线

Route::get('/test/{id}','Frontend\HomePageController@profile');

2 个答案:

答案 0 :(得分:0)

首先,您需要安装此软件包

Laravel Hashids

然后,在您的配置文件方法成功安装后,执行此操作以从数据库中获取数据

$decodedId = Hashids::decode($id)[0];

然后在循环视图中执行此操作

$encodedId = Hashids::encode($test->id);

<li><a href="{{url("test/$encodedId")}}">{{$test->test_name}}</a></li>

您可以转储var以查看正在进行的操作

答案 1 :(得分:0)

所以,如果你想做一个这样的路线:

Route::get('test/{test}', 'TestController@show')->name('test.show');

然后在你的观点中你可以这样做:

<a href="{{ Route('test.show', $test) }}">{{ $test->name }}</a>

至少有两个选项:

选项1

您可以在路线服务提供商中注册绑定。

RouteServiceProvider中执行以下操作:

Route::bind('test', function ($slug) {
    return \App\Test::where('slug', $slug)->firstOrFail();
});

假设您有一个Test的Eloquent模型,其中包含一个唯一字段(我已使用slug)来获取条目。

本教程非常清楚:https://mattstauffer.co/blog/implicit-model-binding-in-laravel-5-2/

选项2

另一种方式。如果您知道您永远不想在URL中引用测试的id并且总是想要引用另一个唯一字段(例如slug),那么您可以自定义Laravel使用的键名称通过覆盖模型上的getRouteKeyName()方法。

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

请参阅此处的文档:https://laravel.com/docs/5.4/routing#route-model-binding