如何使用 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>