Вопрос:

Как я могу сделать динамическую связь с Laravel?

php laravel-5

597 просмотра

1 ответ

90 Репутация автора

Рассмотрим основную категорию подкатегории менталитета. Я хочу иметь следующее при нажатии на ссылку.

Я могу сделать: www.localhost.com/category/

я хочу сделать: www.localhost.com/category/vehicle

производные: www.localhost.com/category/vehicle/bmw www.localhost.com/category/vehicle/bmw/bmm-x7-series

Route::get('/category/{id}', 'CategoryController@index')->name('category.index');
          `

мой маршрут ниже:

Route::get('/category/{slug}', 'CategoryController@index')->where('slug' , '[\w\d\-\_]+');

Я создал элемент управления с именем CategoryController

class CategoryController extends Controller
{
  public function index($slug)
  {
    $category = Category::where('slug' , $slug)->first();
    return view('category.show' , compact('category'));
  }

содержимое моего просмотра (category.show.blade.php)

{{$category->slug}}
          <a href="{{ url('/category/' . $category->slug) }}" class="uhover">life is good. {{url($category->slug)}}</a>
Автор: ufuk Источник Размещён: 09.01.2018 04:37

Ответы (1)


0 плюса

539 Репутация автора

Если вы хотите, чтобы в URL-адресе была указана категория / марка автомобилей, а не идентификатор, вам нужно будет удалить их /{id}с маршрута и заменить его на /{slug}.

Таким образом, ваш маршрут, вероятно, будет выглядеть так:

Route::get('/category/{slug}', 'CategoryController@index')->name('category.index');

Вам придется изменить свой метод на что-то вроде:

// Show Method
public function show($slug){
    $category = Category::where('slug', $slug)->first();
    return view('game.show', compact('category'));
}

В идеале, чтобы убедиться, что слаг уникален, вы должны хранить его в базе данных. Для этого вы можете воспользоваться помощником слагов Laravel, а если слаг уже существует, просто добавьте суффикс, чтобы сделать его уникальным.

Вы можете использовать генерировать модель слаг:

class Item extends Model
{
    public static function boot()
    {
        parent::boot();

        static::saving(function ($model) {
            $model->slug = str_slug($model->name);
        });
    }
}

Если вы хотите использовать привязку к модели маршрута, вам нужно будет указать Eloquent, что столбец для использования должен быть вашим slugстолбцом.

public function getRouteKeyName()
{
    return 'slug';
}
Автор: Victor Размещён: 09.01.2018 09:39
Вопросы из категории :
32x32