Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

viktor3177's avatar

how to write url to Laravel 9 correctly?

I'm new to Laravel and I'm having trouble writing URLs.

How to open a page in a browser without a category? Now all pages are opened (/category/post), but how to do this (/post)? Here is how I wrote

web.php

Route::get('{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewsPost']); FrontendController.php

public function viewsPost(string $post_slug) { $post = Post::where('status','0')->get(); return view('frontend.post.views', compact('post')); } For some reason this doesn't work!

0 likes
8 replies
tykus's avatar

Frist of all... format your code in your post, e.g.

```
Route::get('{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewsPost']);
```

Second, can you show your entire web.php routes file?

viktor3177's avatar

@tykus

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::get('/', [App\Http\Controllers\Frontend\FrontendController::class, 'index']);

Route::get('{service_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewServicePost']);

Route::get('{service_slug}/{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewPost']);

Route::get('{service_slug}/{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewsPost']);

viktor3177's avatar

Here I write in more detail about the problem!

That doesn't work!

I have posts that are linked to a category (localhost/service/post) and they work!

And there are posts that are not attached, and here is the problem with them (localhost/post)

tykus's avatar

@viktor3177 how can your application differentiate these two routes?

Route::get('{service_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewServicePost']);

and

Route::get('{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewsPost']);
viktor3177's avatar

@tykus

public function viewServicePost(string $service_slug)
	{
		$service = Service::where('slug',$service_slug)->where('status','0')->first();
		if($service)
		{
			$post = Post::where('service_id', $service->id)->where('status','0')->get();
			return view('frontend.post.service', compact('post', 'service'));
		}
		else{
			return redirect('/');
		}
	}


public function viewsPost(string $service_slug, string $post_slug) {
    $service = Service::where('slug',$service_slug)->where('status','0')->first();
    if($service)
    {
        $post = Post::where('service_id', $service->id)->where('slug', $post_slug)->where('status','0')->first();
        return view('frontend.post.views', compact('post'));
    }
    else{
        return redirect('/');
    }
}
tykus's avatar

@viktor3177 the point I was making is how can your application know to select one of those actions over the other (TLDR: it cannot). You will need to find a URL scheme to differentiate the two actions.

viktor3177's avatar

Here is the whole file web.php

Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::get('/', [App\Http\Controllers\Frontend\FrontendController::class, 'index']);
Route::get('{service_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewServicePost']);
Route::get('{service_slug}/{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewPost']);
Route::get('{post_slug}', [App\Http\Controllers\Frontend\FrontendController::class, 'viewsPost']);
Route::prefix('admin')->middleware(['auth', 'isAdmin'])->group(function () {

Route::get('/dashboard', [App\Http\Controllers\Admin\DashboardController::class, 'index']);

Route::get('service', [App\Http\Controllers\Admin\ServiceController::class, 'index']);
Route::get('add-service', [App\Http\Controllers\Admin\ServiceController::class, 'create']);
Route::post('add-service', [App\Http\Controllers\Admin\ServiceController::class, 'store']);
Route::get('edit-service/{service_id}', [App\Http\Controllers\Admin\ServiceController::class, 'edit']);
Route::put('update-service/{service_id}', [App\Http\Controllers\Admin\ServiceController::class, 'update']);
//Route::get('delete-service/{service_id}', [App\Http\Controllers\Admin\ServiceController::class, 'destroy']);
Route::post('delete-service', [App\Http\Controllers\Admin\ServiceController::class, 'destroy']);

Route::get('posts', [App\Http\Controllers\Admin\PostController::class, 'index']);
Route::get('add-post', [App\Http\Controllers\Admin\PostController::class, 'create']);
Route::post('add-post', [App\Http\Controllers\Admin\PostController::class, 'store']);
Route::get('post/{post_id}', [App\Http\Controllers\Admin\PostController::class, 'edit']);
Route::put('update-post/{post_id}', [App\Http\Controllers\Admin\PostController::class, 'update']);
Route::get('delete-post/{post_id}', [App\Http\Controllers\Admin\PostController::class, 'destroy']);

Route::get('users', [App\Http\Controllers\Admin\UserController::class, 'index']);
Route::get('users/{user_id}', [App\Http\Controllers\Admin\UserController::class, 'edit']);
Route::put('update-user/{user_id}', [App\Http\Controllers\Admin\UserController::class, 'update']);

});

and file FrontendController.php

{
public function index() {
    $post = Post::where('status','0')->get();
    return view('frontend.index', compact('post'));
}

public function viewServicePost(string $service_slug)
{
    $service = Service::where('slug',$service_slug)->where('status','0')->first();
    if($service)
    {
        $post = Post::where('service_id', $service->id)->where('status','0')->get();
        return view('frontend.post.service', compact('post', 'service'));
    }
    else{
        return redirect('/');
    }
}

public function viewPost(string $service_slug, string $post_slug) {
    $service = Service::where('slug',$service_slug)->where('status','0')->first();
    if($service)
    {
        $post = Post::where('service_id', $service->id)->where('slug', $post_slug)->where('status','0')->first();
        $latest_posts = Post::where('service_id', $service->id)->where('status','0')->orderBy('created_at', 'DESC')->get()->random(3);
        return view('frontend.post.view', compact('post', 'latest_posts'));
    }
    else{
        return redirect('/');
    }
}

public function viewsPost(string $service_slug, string $post_slug) {
    $service = Service::where('slug',$service_slug)->where('status','0')->first();
    if($service)
    {
        $post = Post::where('service_id', $service->id)->where('slug', $post_slug)->where('status','0')->first();
        return view('frontend.post.views', compact('post'));
    }
    else{
        return redirect('/');
    }
}

}

Please or to participate in this conversation.