2017-09-03 87 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