Laravel spatie 可翻译和可 sluggable(可翻译 slugs)

问题描述 投票:0回答:2

所以我刚刚发现了包 laravel-sluggable 并且我正在尝试设置 translatable slugs。我遇到了路由模型绑定错误,错误404。所以我创建了一个简单的迁移,简单的模型和简单的路由,但出现了同样的错误。我的数据库支持json。

我的迁移:

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->json('name');
        $table->json('slug');
        $table->timestamps();
    });
}

我的型号:

<?php

namespace App\Models;

use Spatie\Sluggable\SlugOptions;
use Illuminate\Database\Eloquent\Model;
use Spatie\Translatable\HasTranslations;
use Spatie\Sluggable\HasTranslatableSlug;

class Post extends Model
{
    use HasTranslations, HasTranslatableSlug;

    public $translatable = ['name', 'slug'];

    /**
     * Get the options for generating the slug.
     */
    public function getSlugOptions() : SlugOptions
    {
        return SlugOptions::create()
            ->generateSlugsFrom('name')
            ->saveSlugsTo('slug');
    }

    /**
     * Get the route key for the model.
     *
     * @return string
     */
    public function getRouteKeyName()
    {
        return 'slug';
    }
}

Artisan Tinker 向我显示我创建的帖子已添加,如下所示:

+"name": "{"nl": "test"}",
+"slug": "{"nl": "test"}",

我的语言环境目前确实是

nl
,但浏览到以下路线会出现 404 错误:

use App\Models\Post;

Route::get('posts/{post}', function (Post $post) {
    dd($post);
});

我的问题是,我在这里错过了什么?普通的蛞蝓与这个包一起工作就像一个魅力。此外,可翻译包的功能也非常出色。这只是我现在遇到问题的翻译后的段子。

php laravel slug
2个回答
0
投票

全新安装的 Laravel 9 运行得非常顺利,因此我已将 Laravel 8 升级到 Laravel 9,现在可以正常运行了。


0
投票

也许这可以帮助你?

public function scopeFindBySlugOrFail($query, string $slug): Model
{
    return $query->where(function ($query) use ($slug) {
        foreach (['en', 'ru', 'tm'] as $locale) {
            $query->orWhere("slug->$locale", $slug);
        }
    })->firstOrFail();
}
© www.soinside.com 2019 - 2024. All rights reserved.