首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类别slug + post slug Laravel雄辩

在Laravel框架中,"类别slug + post slug"是一种常见的URL结构,用于构建清晰且用户友好的网址。这种结构有助于搜索引擎优化(SEO),同时为用户提供直观的导航体验。

基础概念

Slug:在URL中,slug是指用于标识特定资源的简洁、友好的字符串。它通常由小写字母、数字和连字符(-)组成,用于替代传统的ID或复杂的参数。

相关优势

  1. 可读性:用户可以轻松理解URL的含义,例如/category/tech-news/my-article
  2. SEO友好:搜索引擎更喜欢这种结构化的URL,有助于提高网站的搜索排名。
  3. 易于维护:如果文章或分类的标题发生变化,只需更新slug即可,而不需要更改数据库中的ID或其他复杂逻辑。

类型与应用场景

  • 类别Slug:代表内容的分类,如tech-newslifestyle等。
  • 帖子Slug:代表具体文章的唯一标识,如my-articleintroduction-to-laravel等。

这种结构广泛应用于博客、新闻网站、电商产品详情页等多种场景。

实现示例

假设我们有一个博客系统,需要在Laravel中实现这种URL结构。

路由定义

首先,在routes/web.php中定义路由:

代码语言:txt
复制
Route::get('/category/{categorySlug}/post/{postSlug}', [PostController::class, 'show']);

控制器处理

然后,在PostController中编写对应的处理逻辑:

代码语言:txt
复制
namespace App\Http\Controllers;

use App\Models\Category;
use App\Models\Post;

class PostController extends Controller
{
    public function show($categorySlug, $postSlug)
    {
        $category = Category::where('slug', $categorySlug)->firstOrFail();
        $post = Post::where('slug', $postSlug)->firstOrFail();

        return view('posts.show', compact('category', 'post'));
    }
}

模型关联

确保你的Post模型与Category模型之间有正确的关联:

代码语言:txt
复制
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

视图渲染

最后,在resources/views/posts/show.blade.php中展示文章详情:

代码语言:txt
复制
@extends('layouts.app')

@section('content')
    <h1>{{ $post->title }}</h1>
    <p>{{ $post->content }}</p>
    <p>Category: {{ $category->name }}</p>
@endsection

遇到的问题及解决方法

问题:如果访问一个不存在的slug,页面会显示404错误。

原因:这是因为我们在控制器中使用了firstOrFail()方法,当查询不到数据时会抛出404异常。

解决方法:可以通过自定义404页面或者捕获异常来提供更友好的用户体验。

例如,在控制器中捕获异常:

代码语言:txt
复制
use Illuminate\Database\Eloquent\ModelNotFoundException;

public function show($categorySlug, $postSlug)
{
    try {
        $category = Category::where('slug', $categorySlug)->firstOrFail();
        $post = Post::where('slug', $postSlug)->firstOrFail();
    } catch (ModelNotFoundException $e) {
        abort(404, 'The requested page was not found.');
    }

    return view('posts.show', compact('category', 'post'));
}

这样,当访问不存在的slug时,用户会看到一个自定义的404错误页面,而不是默认的Laravel错误页面。

通过以上步骤,你可以有效地在Laravel中实现并管理“类别slug + post slug”的URL结构。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

3分钟短文:Laravel slug,让你的url地址更“好记”

[img] 本文就来讲讲,如何在laravel中构造友好的url路由。 啥是slug?...我们在之前的章节已经使用laravel Route功能,重新构造了url,所以访问起来像是连贯的: http://example.com/events/42 直接使用位置参数绑定的方式传递。...如果使用如下方式,效果要友好的多: http://example.com/events/laravel-hacking-and-coffee 这种基于字符串位置参数绑定的URL方式,被称为 slug。...如果你有印象的话,应该会记得laravel模型的find等方法,是基于primary key进行索引,以便加快查询速度。拿到模型的ID,查询该条目数据,然后返回模型实例。...findBySlugOrFail('laravel-hacking-and-coffee'); 归根结底,就是使用slug字段记录查询的字符串,而slug字段在对应关系中定义为 source => ‘name

3.5K11

Laravel 7 新特性-路由的趟坑之路(自定义键名以及作用域)

Laravel 7 开始新增了一些新特性,今天我们来讲解下 路由绑定的新用法,自定义键名(slug)以及作用域(范围限定) 首先我们 安装最新版本的 Laravel ,并且创建两张数据表。...public function getRouteKeyName() { return 'slug'; } 接下来我们就可以使用 slug 来进行查询了 比如下面的 URL http://laravel7...Route::get('posts/{post:slug}', function (\App\Post $post) { dd($post); }); 作用域(访问限制) 怎么理解呢?...我们代码演示一下 Route::get('api/users/{user}/posts/{post:slug}', function (User $user, Post $post) { return...Route::get('api/users/{user}/posts/{post:slug}', function (\App\User $user, \App\Post $post) { return

2.5K10
  • Laravel5.2之Seeder填充数据小技巧

    说明:本文主要聊一聊Laravel测试数据填充器Seeder的小技巧,同时介绍下Laravel开发插件三件套,这三个插件挺好用哦。同时,会将开发过程中的一些截图和代码黏上去,提高阅读效率。...1、barryvdh/laravel-debugbar composer require barryvdh/laravel-debugbar --dev 2、barryvdh/laravel-ide-helper...composer require barryvdh/laravel-ide-helper --dev 3、mpociot/laravel-test-factory-helper composer require...表与Tag表是多对多关系,还需要一张存放两者关系的表: //多对多关系,中间表的命名laravel默认按照两张表字母排序来的,写成tag_post会找不到中间表 php artisan make:migration...' => $faker->slug ,//修改为slug 'summary' => $faker->word , 'content' => $faker->text

    3.6K42

    # 3分钟短文:Laravel路由注册,你必须掌握的“动词”!

    本期为大家说一说用laravel注册路由的那些必知必会的方法。 代码时间 遵循编程惯例,首先实现一个 hello world 的示例。...这4条路由都是GET方式,如果使用其他HTTP标准的请求方式,可以如下注册: Route::post('/', function () {}); Route::put('/', function ()...{}); Route::delete('/', function () {}); Route::any('/', function () {}); Route::match(['get', 'post'...如果路由内声明了多个位置参数,且都需要验证,那么在 where 方法内传入参数名 + 正则的数组即可: Route::get('posts/{id}/{slug}', function ($id, $slug...写在最后 本文初步介绍了laravel内注册一条路由的方法,简单地讲解了位置参数的传入和接收,以及在路由内添加正则表达式赋能的条件约束方式。都是基础而且使用的,大家一定要牢固掌握。

    72422

    3分钟短文:Laravel路由注册,你必须掌握的“动词”!

    本期为大家说一说用laravel注册路由的那些必知必会的方法。 代码时间 遵循编程惯例,首先实现一个 hello world 的示例。...这4条路由都是GET方式,如果使用其他HTTP标准的请求方式,可以如下注册: Route::post('/', function () {}); Route::put('/', function ()...{}); Route::delete('/', function () {}); Route::any('/', function () {}); Route::match(['get', 'post'...如果路由内声明了多个位置参数,且都需要验证,那么在 where 方法内传入参数名 + 正则的数组即可: Route::get('posts/{id}/{slug}', function ($id, $slug...写在最后 本文初步介绍了laravel内注册一条路由的方法,简单地讲解了位置参数的传入和接收,以及在路由内添加正则表达式赋能的条件约束方式。都是基础而且使用的,大家一定要牢固掌握。

    42620

    woocommerce shortcode短代码调用

    WooCommerce配备了很多shortcode短代码(简码),可以直接在post帖子和page页面内插入内容,方便展示产品、分类等。...category– 逗号分隔的类别蛞蝓列表。 tag– 以逗号分隔的标签 slug 列表。 order– 使用中设置的方法说明产品订单是升序 () 还是降序 ()。默认值为 。...category– 使用指定的类别 slug 检索产品。 tag– 使用指定的标签 slug 检索产品。 cat_operator– 用于比较类别术语的运算符。...为此,我们将使用 Post ID(在创建产品页面时生成)以及 order 和 orderby 命令。由于您无法从前端看到 Post ID,因此 ID#s 已叠加在图像上。...用于 [product_categories] category– 可以是类别 ID、名称或 slug。

    11.2K20

    如何通过View::first使用Laravel Blade的动态模板详解

    前言 本文主要给大家介绍了关于View::first使用Laravel Blade动态模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。...我们可以通过一系列的 if 判断或者使用 view()->exists()  来判断自定义模板是否存在,然而,Laravel 5.5 为我们带来了一个更加优雅的方法来实现这个功能。...当然,你可以传递任意个数的模版,你甚至还可以使用动态名称: return view()->first([ "pages/{$page->slug}", "pages/category-{$page-/【...本文中一些PHP版本可能是以前的,如果不是一定要,建议PHP尽量使用7.2以上的版本】/>category->slug}", "pages/default-template" ], $data); 此外...,你还可以通过 Facade 版本的这个功能: View::first($templates, $data) 这个动态选择模版的 Blade 方法是在 Laravel 5.5 中引入的,使得处理动态模版更加简洁

    1.3K30
    领券