如何使用 eloquent-sluggable 包将 slug 附加到 Laravel 5.3 中的 url 的末尾?
How to append a slug to the end of the url in Laravel 5.3 using eloquent-sluggable package?
我有 slug eloquent 包裹。我想像这样创建一个 url :
http://www.example.com/houses/id/house-with-2-bedrooms
让我解释一下 url:
houses 和 id 表示资源和 id,如其余架构所述。
带 2 间卧室的房子部分就是 slug 本身。
动态部分是数字 2,代表房子的卧室数量。
所以我可以
http://www.example.com/houses/100/house-with-2-bedrooms
http://www.example.com/houses/101/house-with-2-bedrooms
http://www.example.com/houses/102/house-with-3-bedrooms
我知道 slug 更常用于创建更复杂的 urls,删除 url 不需要的字符,如 ~ 和 ^ 但我现在只想要一个简单的字符。
我阅读了 Git 网站上的教程,但无法正常工作,也不明白我在做什么。
到目前为止我有这个:
我的房屋模型有弹头区域。
我定义了 Sluggable 特性:
我的模特:
use Cviebrock\EloquentSluggable\Sluggable;
class House extends Model
{
use Sluggable;
public function announcement()
{
return $this->belongsTo(\App\Announcement::class, 'id' , 'id');
}
protected $table = 'house';
protected $primaryKey = 'id';
protected $fillable = array( 'id', 'capacity', 'bedrooms', 'pool', 'price', 'dir_id', 'identifier', 'photos', 'views', 'active', 'description', 'slug');
public $timestamps = false;
protected $connection = 'eloquent_db';
public function sluggable()
{
return ['slug' => ['source' => 'bedrooms'] ];
}
}
我的控制器:
route::resource('houses', HousesController').
在您的模型中创建一个函数作为您想要显示的 slug,例如 Myslug,如下所示:
class House extends Eloquent
{
use Sluggable;
public function sluggable()
{
return [
'slug' => [
'source' => 'myslug'
]
];
}
public function getMyslugAttribute() {
return 'house-with-' . $this->bedrooms.'-bedrooms;
}
}
或任何你想要的
然后将其存储在您的数据库中,并从 table 任何您想要的地方调用它,如下所示:
$house->slug;
您可以根据需要定义 url
<a href="{{ url('houses/'.$house->id.'/'.$house->slug)}}">house link</a>
你可以简单地实现
在路上
Route::resource('houses', 'HousesController', ['except' => 'show']);
Route::get('/houses/{id}/{slug}', 'HousesController@show')->name('houses.show');
正在查看生成 URL
<a href="{{ route('houses.show', [$house->id, $house->slug]) }}">Sample House</a>
我有 slug eloquent 包裹。我想像这样创建一个 url : http://www.example.com/houses/id/house-with-2-bedrooms 让我解释一下 url:
houses 和 id 表示资源和 id,如其余架构所述。
带 2 间卧室的房子部分就是 slug 本身。 动态部分是数字 2,代表房子的卧室数量。 所以我可以
http://www.example.com/houses/100/house-with-2-bedrooms
http://www.example.com/houses/101/house-with-2-bedrooms
http://www.example.com/houses/102/house-with-3-bedrooms
我知道 slug 更常用于创建更复杂的 urls,删除 url 不需要的字符,如 ~ 和 ^ 但我现在只想要一个简单的字符。
我阅读了 Git 网站上的教程,但无法正常工作,也不明白我在做什么。
到目前为止我有这个:
我的房屋模型有弹头区域。
我定义了 Sluggable 特性:
我的模特:
use Cviebrock\EloquentSluggable\Sluggable;
class House extends Model
{
use Sluggable;
public function announcement()
{
return $this->belongsTo(\App\Announcement::class, 'id' , 'id');
}
protected $table = 'house';
protected $primaryKey = 'id';
protected $fillable = array( 'id', 'capacity', 'bedrooms', 'pool', 'price', 'dir_id', 'identifier', 'photos', 'views', 'active', 'description', 'slug');
public $timestamps = false;
protected $connection = 'eloquent_db';
public function sluggable()
{
return ['slug' => ['source' => 'bedrooms'] ];
}
}
我的控制器:
route::resource('houses', HousesController').
在您的模型中创建一个函数作为您想要显示的 slug,例如 Myslug,如下所示:
class House extends Eloquent
{
use Sluggable;
public function sluggable()
{
return [
'slug' => [
'source' => 'myslug'
]
];
}
public function getMyslugAttribute() {
return 'house-with-' . $this->bedrooms.'-bedrooms;
}
}
或任何你想要的
然后将其存储在您的数据库中,并从 table 任何您想要的地方调用它,如下所示:
$house->slug;
您可以根据需要定义 url
<a href="{{ url('houses/'.$house->id.'/'.$house->slug)}}">house link</a>
你可以简单地实现
在路上
Route::resource('houses', 'HousesController', ['except' => 'show']);
Route::get('/houses/{id}/{slug}', 'HousesController@show')->name('houses.show');
正在查看生成 URL
<a href="{{ route('houses.show', [$house->id, $house->slug]) }}">Sample House</a>