vlados / laravel-unique-urls
Laravel 中每个 Eloquent 模型使用和生成唯一 URL 的包
v0.4.1
2024-05-17 21:02 UTC
Requires
- php: ^8.1
- illuminate/contracts: ^9.0|^10.0|^11.0
- spatie/laravel-model-info: ^1.4|^2.0
- spatie/laravel-package-tools: ^1.9.2|^2.0
- spatie/laravel-translatable: ^6.0|^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- nunomaduro/phpinsights: ^2.4
- orchestra/testbench: ^7.0
- pestphp/pest: ^1.21
- pestphp/pest-plugin-faker: ^1.0
- pestphp/pest-plugin-laravel: ^1.1
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- spatie/laravel-ray: ^1.26
- dev-main
- v0.4.1
- v0.4.0
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.0
- dev-depfu/update/composer/orchestra/testbench-8.26.0
- dev-depfu/update/composer/pestphp/pest-2.35.1
- dev-depfu/update/composer/orchestra/testbench-8.25.0
- dev-depfu/update/composer/phpunit/phpunit-10.5.30
- dev-depfu/update/composer/phpunit/phpunit-11.3.1
- dev-depfu/update/composer/nunomaduro/collision-8.4.0
- dev-depfu/update/composer/pestphp/pest-2.35.0
- dev-depfu/update/composer/phpunit/phpunit-11.3.0
- dev-depfu/update/composer/phpunit/phpunit-11.2.9
- dev-depfu/update/composer/phpunit/phpunit-10.5.29
- dev-depfu/update/composer/phpunit/phpunit-10.5.28
- dev-depfu/update/composer/nunomaduro/collision-8.3.0
- dev-depfu/update/composer/phpunit/phpunit-10.5.26
- dev-dependabot/github_actions/dependabot/fetch-metadata-2.2.0
- dev-depfu/update/composer/phpunit/phpunit-10.5.25
- dev-depfu/update/composer/phpunit/phpunit-10.5.24
- dev-depfu/update/composer/phpunit/phpunit-10.5.22
- dev-depfu/update/composer/phpunit/phpunit-10.5.21
- dev-depfu/update/composer/pestphp/pest-2.34.8
- dev-depfu/update/composer/phpunit/phpunit-11.2.0
- dev-depfu/update/composer/orchestra/testbench-9.1.2
- dev-depfu/update/composer/orchestra/testbench-9.1.1
- dev-depfu/update/composer/orchestra/testbench-8.23.0
- dev-dependabot/github_actions/ramsey/composer-install-3
- dev-depfu/update/composer/pestphp/pest-plugin-laravel-2.4.0
- dev-depfu/update/composer/phpunit/phpunit-10.5.19
- dev-depfu/update/composer/orchestra/testbench-9.0.4
- dev-depfu/update/composer/phpunit/phpunit-10.5.18
- dev-depfu/update/composer/phpunit/phpunit-11.1.1
- dev-depfu/update/composer/pestphp/pest-2.34.7
- dev-depfu/update/composer/phpunit/phpunit-10.5.16
- dev-depfu/update/composer/orchestra/testbench-9.0.3
- dev-depfu/update/composer/pestphp/pest-2.34.5
- dev-depfu/update/composer/phpunit/phpunit-10.5.15
- dev-depfu/update/composer/orchestra/testbench-8.22.1
- dev-depfu/update/composer/orchestra/testbench-8.22.0
- dev-depfu/update/composer/pestphp/pest-2.34.2
- dev-depfu/update/composer/phpunit/phpunit-10.5.12
- dev-depfu/update/composer/nunomaduro/collision-8.1.1
- dev-depfu/update/composer/phpunit/phpunit-11.0.4
- dev-depfu/update/composer/pestphp/pest-2.34.1
- dev-depfu/update/composer/phpunit/phpunit-10.5.11
- dev-depfu/update/composer/pestphp/pest-plugin-laravel-2.3.0
- dev-depfu/update/composer/phpunit/phpunit-11.0.3
- dev-depfu/update/composer/nunomaduro/collision-8.1.0
- dev-depfu/update/composer/orchestra/testbench-8.20.0
- dev-depfu/update/composer/nunomaduro/collision-7.10.0
- dev-feature/add-rebuild-command
- dev-feature/48-implement-fallback-locale
This package is auto-updated.
Last update: 2024-09-27 07:07:55 UTC
README
为博客、电子商务和平台生成不带前缀的唯一 URL。Laravel
目标
- 当创建或更新模型时,根据每个模型中 urlStrategy() 函数生成唯一 URL
- 可以为不同语言设置不同的 URL(不仅仅是开始时的前缀)
- 如果 URL 已存在,则创建新的 URL,后缀为 _1、_2 等。
- 如果我们更新模型以从旧 URL 重定向到新 URL
- 如果有多个重定向,则只重定向到最后一个
- 根据关系(类别名称/产品名称)设置 URL 的可能性
安装
您可以通过 composer 安装此包
composer require vlados/laravel-unique-urls
您可以使用以下命令发布和运行迁移
php artisan vendor:publish --tag="laravel-unique-urls-migrations"
php artisan migrate
使用
配置
您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="laravel-unique-urls-config"
将创建 unique-urls.php
,如下所示
return [ // Locale => $language 'languages' => [ 'bg_BG' => 'bg', 'en_US' => 'en', 'de_DE' => 'de', ], 'redirect_http_code' => 301, ];
准备你的模型
在你的模型中添加以下方法
class MyModel extends Model { use Vlados\LaravelUniqueUrls\HasUniqueUrls; public function urlStrategy($language,$locale): string { return Str::slug($this->getAttribute('name'),"-",$locale); } public function urlHandler(): array { return [ // The controller used to handle the request 'controller' => CategoryController::class, // The method 'method' => 'view', // additional arguments sent to this method 'arguments' => [], ]; }
处理请求的方法
public function view(Request $request, $arguments = []) { dd($arguments); }
路由
最后,在 routes/web.php
文件的末尾添加以下行
Route::get('{urlObj}', [\Vlados\LaravelUniqueUrls\LaravelUniqueUrlsController::class, 'handleRequest'])->where('urlObj', '.*');
批量导入
例如,如果您有类别树并且需要在创建 URL 之前导入所有数据,您可以在模型创建时禁用自动生成 URL。要禁用自动生成 URL,请覆盖模型中的 isAutoGenerateUrls
方法
public function isAutoGenerateUrls(): bool { return false; }
并在稍后按如下方式调用 generateUrl()
YourModel::all()->each(function (YourModel $model) { $model->generateUrl(); });
或者,如果您想即时禁用它,请使用
$model = new TestModel(); $model->disableGeneratingUrlsOnCreate(); $model->name = "Test"; $model->save();
Livewire
要使用 Livewire 全页面组件 来处理请求,首先在模型中的 urlHandler()
函数中设置
public function urlHandler(): array { return [ // The Livewire controller 'controller' => CategoryController::class, // The method should be empty 'method' => '', // additional arguments sent to the mount() function 'arguments' => [], ]; }
示例 livewire 组件
class LivewireComponentExample extends Component { private Url $urlModel; private array $url_arguments; public function mount(Url $urlObj, $arguments = []) { $this->urlModel = $urlObj; $this->url_arguments = $arguments; } public function render() { return view('livewire.view-category'); } }
API
命令
urls:generate
此命令为指定的模型或实现 HasUniqueUrls
特性的应用程序中所有模型生成唯一 URL。
使用
php artisan urls:generate [--model=ModelName] [--fresh] [--only-missing]
urls:doctor
此命令检查应用程序中的所有模型是否已正确实现 HasUniqueUrls 特性和所需函数。
使用
php artisan urls:doctor [--model=ModelName]
检查
- 检查是否所有方法都使用正确的参数实现
- 检查 urlHandler 是否返回正确的控制器和方法
- 检查 urlStrategy 是否为所有语言生成唯一 URL
测试
composer test
变更日志
请参阅 CHANGELOG 了解最近更改的更多信息。
贡献
语义提交消息
了解如何通过修改提交消息样式来提高您作为程序员的水平。格式:<type>(<scope>): <subject>
<scope>
是可选的
feat: add hat wobble
^--^ ^------------^
| |
| +-> Summary in present tense.
|
+-------> Type: chore, docs, feat, fix, refactor, style, or test.
更多示例
feat
: (为用户提供的新功能,而不是为构建脚本添加新功能)fix
: (对用户而言的 bug 修复,而不是对构建脚本的修复)docs
: (对文档的更改)style
: (格式化、缺少分号等;没有生产代码更改)refactor
: (重构生产代码,例如重命名变量)test
: (添加缺少的测试、重构测试;没有生产代码更改)任务
: (更新Grunt任务等;不修改生产代码)
参考资料
- https://www.conventionalcommits.org/
- https://seesparkbox.com/foundry/semantic_commit_messages
- https://karma.node.org.cn/1.0/dev/git-commit-msg.html
安全漏洞
请查阅我们如何报告安全漏洞的安全策略。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。