На данный момент получается вывести запись по id, по ссылке /cabinet/service/2 Роуты: PHP: Route::get('/', function () { return view('welcome'); }); Route::group(['prefix'=>'cabinet', 'as' => 'cabinet.', 'namespace'=>'Cabinet', 'middleware'=>['auth']], function(){ Route::get('/', 'CabinetController@index')->name('index'); Route::group(['prefix'=>'service', 'as'=>'service.'], function () { Route::get('/', 'ServiceController@index')->name('list'); Route::get('/{slug}', 'ServiceController@show')->name('item'); }); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); Контроллер ServiceController.php: PHP: <?php namespace App\Http\Controllers\Cabinet; use App\Service; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class ServiceController extends Controller { public function index() { return view('cabinet.index', [ 'services' => Service::paginate(10) ]); } public function show(Service $slug) { return view('cabinet.service.item', [ 'service' => Service::where('slug', '=', $slug)->first() ] ); } Модель Service.php : PHP: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Service extends Model { protected $fillable = ['title', 'slug', 'published', 'description_short', 'description']; public function setSlugAttribute($value) { $this->attributes['slug'] = Str::slug( mb_substr($this->title, 0, 40), '-'); } public function scopeLastServices($query, $count) { return $query->where('published', 1)->orderBy('created_at', 'desc')->take($count)->get(); } } При такой реализации метода show() выходит ошибка: Trying to get property 'title' of non-object (View: \resources\views\cabinet\service\item.blade.php) Т.е. Service::where('slug', '=', $slug)->first() и Service::where('slug', '=', $slug)->get() и Service::where('slug', $slug)->first() ничего не получают из базы. А вот если Route::get('/{slug}', 'ServiceController@show')->name('item'); заменить на Route::get('/{id}', 'ServiceController@show')->name('item'); И метод show переписать на: PHP: <?php namespace App\Http\Controllers\Cabinet; use App\Service; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class ServiceController extends Controller { public function show(Service $id) { return view('cabinet.service.item', [ 'service' => $id ] ); } То по ссылкам вида /cabinet/service/2 , выводится нужный сервис. Laravel 5.8 Как исправить на вывод по slug?
В общем снова проблема с id и slug, но немного другая. Роуты такие: PHP: Route::group(['prefix'=>'cabinet', 'as' => 'cabinet.', 'namespace'=>'Cabinet', 'middleware'=>['auth']], function(){ Route::get('/', 'CabinetController@index')->name('index'); Route::group(['prefix'=>'service', 'as'=>'service.'], function () { Route::get('/', 'ServiceController@index')->name('list'); Route::get('/{slug}', 'ServiceController@show')->name('item'); //Route::resource('/{slug}/inwork', 'InWorkController', ['as'=>'inwork']); Route::group(['prefix'=>'/{slug}/inwork', 'as'=>'inwork.'], function () { Route::get('/', 'InWorkController@show')->name('show'); Route::get('/edit', 'InWorkController@edit')->name('edit'); Route::post('/edit', 'InWorkController@edit')->name('edit'); }); }); }); В шаблоне на blade шаблонизаторе, написано: HTML: <a href="{{route('cabinet.service.inwork.show', $service)}}">Начать работу</a> Но ссылка формируется не со слагом, а с id , т.е. такая /cabinet/service/3/inwork. При переходе по ней 404 ошибка, а если в адресной строке заменить цифру 3 на соотвествующий слаг, но отображается нужна страница. Как сделать чтобы создавались ссылки как надо. Делал php artisan route:clear Но не помогло
Помогли, нужно было написать так: Код (Text): <a href="{{route('cabinet.service.inwork.show', ['slug' => $service->slug])}}">Начать работу</a>