Ślimaki Laravel z Str:: ślimak
Patrząc na Str:: slug dla mojego generowania URL frontend ale tylko zastanawiam się jak wam idzie implementacja go z trasami itp, na przykład, jak byście się zmienili http://www.example.com/courses/1 do http://www.example.com/courses/this-course
5 answers
OK, zrobiłem to w ten sposób:
// I have a slug field in my courses table and a slug field in my categories table, along with a category_id field in my courses table.
// Route
Route::get('courses/{categorySlug}/{slug?}', function($categorySlug, $slug) {
$course = Course::leftJoin('categories', 'categories.id', 'courses.category_id')
->where('categories.slug', $categorySlug)
->where('courses.slug', $slug)
->firstOrFail();
return View::make('courses.show')->with('course', $course);
});
Działa jak urok. Otrzymuje zmienne $ categorySlug i $slug, a następnie używa ich do filtrowania wymownego kursu modelu, aby uzyskać prawidłowy obiekt kursu z bazy danych.
EDIT : możesz wygenerować adres URL w widoku:
Http://www.example.com/courses/it-training/mcse
Robiąc coś takiego:
<a href="{{ URL::to('courses/'.$course->category->parentCategorySlug($course->category->parent_id).'/'.$course->category->slug.'/'. $course->slug) }}" title="{{ $course->title }}">{{ $course->title }}</a>
A mają metodę w mojej kategorii jak poniżej, która pobiera SLUG kategorii nadrzędnej. To można lepiej osiągnąć, używając jakiejś klasy prezentera, która pozwoliłaby ci po prostu użyć $course- > url, ale jeszcze tego nie zrobiłem. Zaktualizuję odpowiedź, kiedy to zrobię.
public function parentCategorySlug($parentId)
{
if ($parentId === '0')
{
return $this->slug;
}
return $this->where('id', $parentId)->first()->slug;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-10 14:26:16
Możesz użyć wymownego pakietu cvierbrock .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 14:00:03
Jak dla mnie stworzyłem funkcję helpera i zastosowałem następującą metodę zaczerpniętą z tutaj .
public static function getSlug($title, $model) {
$slug = Str::slug($title);
$slugCount = count( $model->whereRaw("url REGEXP '^{$slug}(-[0-9]*)?$'")->get() );
return ($slugCount > 0) ? "{$slug}-{$slugCount}" : $slug;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-18 19:16:45
Zaimplementowałem również podobne mapowanie URL, ale wolałem mieć zarówno ID, jak i slug w żądanym adresie URL, jak to:
http://www.example.com/courses/1/my-laravel-course
Ta metoda pozwala mi uzyskać żądany obiekt course
z identyfikatora podanego w adresie URL, zamiast konieczności przechowywania ślimaków w mojej tabeli DB.
Route::post('courses/(:num)/(:any)', function ($courseid, $slug) {
$course = Course::where('id', '=', $courseid)->get();
return View::make('courses.show')->with('course', $course);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-01 10:47:01
Możesz utworzyć powiązany Model ślimaka i podejść do kursu w swoich metodach tak:
$course = Slug::where('slug', $slug) -> firstOrFail() -> course;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-22 06:43:57