所以我刚刚发现了包 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);
});
我的问题是,我在这里错过了什么?普通的蛞蝓与这个包一起工作就像一个魅力。此外,可翻译包的功能也非常出色。这只是我现在遇到问题的翻译后的段子。
全新安装的 Laravel 9 运行得非常顺利,因此我已将 Laravel 8 升级到 Laravel 9,现在可以正常运行了。
也许这可以帮助你?
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();
}