2017-09-03 96 views
0

我试图让动态URL是创建伪装URL或类似这样的东西:如何创建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,但是,我怎么能得到数据的URL s你需要怎样lasomething其他

路线

Route::get('/test/{id}','Frontend\[email protected]'); 
+0

嘿阿尔法,难道我和你的问题的回答帮助? –

+0

是的,但它在某种程度上是使用你的选项2,但你没有以清晰的方式写它,但无论如何,我从中得到了一个想法,如何做到这一点。 –

+0

随意编辑我的答案,使其更清晰。我认为给出一个示例代码片段和官方文档的链接就足够了。 –

回答

0

首先安装该软件包

Laravel Hashids

然后后您的个人资料的方法安装成功这样做是为了从DB

获取数据
$decodedId = Hashids::decode($id)[0]; 

然后在你的vi EW在循环做到这一点

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

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

你可以转储VAR,看看发生了什么事情

0

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

Route::get('test/{test}', '[email protected]')->name('test.show'); 

然后在您的意见你可以这样做:

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

至少有2个选择:

选项1

可以注册在路线服务提供商有约束力的。

RouteServiceProvider做这样的事情:

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

假设你有Test雄辩的模型,包含一个独特的领域(我用slug)抓住该条目。

本教程介绍是相当不错:https://mattstauffer.co/blog/implicit-model-binding-in-laravel-5-2/

选项2

的另一种方式。如果您知道您永远不会想要在URL中引用该测试的id,并且始终想要引用另一个唯一字段(例如slug),则可以通过重写getRouteKeyName()方法来自定义Laravel使用的密钥名称该模型。

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

在这里看到的文档:https://laravel.com/docs/5.4/routing#route-model-binding