2017-12-11 16 views
0

私はLaravelとのかなりのリンクを得ようとしています。前へ/スラッグに単語を追加

私はタグ付きの投稿があります。私のタグ付き投稿はlocalhost/tag-slugで閲覧できます。私はタグスラッグをデータベースに保存します。私はそれがで動作するように取得することができます

  • localhost/awesome-laravel-posts
  • localhost/best-php-posts

私は私のようなものを持つことができますので、追加し、いくつかの言葉でこれらのスラグを付加しようとしている

Route::get('/awesome-{tag}-posts', '[email protected]')->name('tag') 

しかし、タグのスラッグに-、失敗します。ここで

は私のモデルである:

class Tag extends Model 
{ 
    public function jobs() 
    { 
     return $this->belongsToMany(Post::class); 
    } 

    public function getRouteKeyName() 
    { 
     return 'slug'; 
    } 
} 

任意のアイデアはどのように私はこれを達成することができますか?それも可能ですか?

答えて

0

もちろん、それはできます。私は、例えば、雄弁コードはSluggable専用のライブラリをお勧めします:https://github.com/cviebrock/eloquent-sluggable

インストール:

composer require cviebrock/eloquent-sluggable:^4.3 

使用法:

use Cviebrock\EloquentSluggable\Sluggable; 

class Post extends Model 
{ 
    use Sluggable; 

    /** 
    * Return the sluggable configuration array for this model. 
    * 
    * @return array 
    */ 
    public function sluggable() 
    { 
     return [ 
      'slug' => [ 
       'source' => 'title' 
      ] 
     ]; 
    } 
} 

Laravelであなたの雄弁モデルのためのナメクジを簡単に作成。

0

regexを使用してルート引数を定義することができます。あなたはこれを行うことができ、{tag}は何でも一致します:

Route::get('/awesome-{tag}-posts', '[email protected]') 
    ->where('tag', '.*')->name('tag'); 

おそらく、あなたの場合にはより良い正規表現を書くことができます。

関連する問題