whitecube / laravel-links
无需担心路由、slug 或域名更改即可存储和解析内部 URL
Requires
- php: >=8.1
- laravel/framework: ^10.40|^11.0
Requires (Dev)
- mockery/mockery: ^1.6
- orchestra/testbench: ^8.21
- pestphp/pest: ^2.31
README
🔗 没有更多的断链!
♻️ 对路由结构、模型绑定、slug 等进行的更改将直接映射到此包生成的所有 URL;
🎯 显示直观且详尽的链接选择表单字段;
💾 按照您想要的地点和方式存储对简单或复杂 URL 的引用。
Laravel 的路由系统很棒。使用此包,它将变得更好!使用简单的链接引用语法,您将能够动态存储和解析 URL,并充分利用 Laravel 在 CMS 编辑器、管理界面和其他受管理配置中的路由。
构建内容页面并想在管理面板中添加插入应用程序资源链接的可能性(甚至外部链接)?您基本上有两个选项
- 将完整 URL 作为字符串存储,并希望它不会很快更改
Hi! What can I get you? We have some great [apples](https://my-application.test/store/food/fruit/organic-apples). Love this package? Support us and consider [sponsoring Whitecube](https://github.com/sponsors/whitecube)!
- 存储对 URL 的简短、不可变的引用,并让您的应用程序在运行时解析其当前有效的 URL
Hi! What can I get you? We have some great [apples](#link[products.item@216]). Love this package? Support us and consider [sponsoring Whitecube](#link[sponsor])!
您会明白:第二个可能是最好的。然而,设置和维护它可能会迅速变得相当复杂。这就是我们构建此包的原因。
目录
安装
composer require whitecube/laravel-links
此包将自动注册其服务提供程序。
用法
首先,您需要注册应用程序的链接解析器。链接解析器是用于将不可变的链接引用(如 products.item@216
)转换为完全限定 URL 的对象。解析器可以处理应用程序的任何路由,甚至是复杂的外部 URL。此包附带了一些常见的解析器,但您也可以创建自己的解析器!
一个好的开始是从服务提供程序开始。您可以使用现有的一个(为什么不使用应用程序的 RouteServiceProvider
?)或创建一个专门的提供程序(例如 LinkServiceProvider
)。然后,在提供程序的 boot
方法中,为每个要引用的链接提供解析器定义
use App\Models\Product; use Whitecube\Links\Facades\Links; public function boot() { // Simple routes: Links::route('home'); Links::route('about')->title('About us'); Links::route(name: 'catalog', parameters: ['list' => 'bestselling'])->title('Popular products'); // Group resources as an "archive": Links::archive('products') ->index(fn($link) => $link->route('products')->title('All products')) ->items(fn($link) => $link->route('product') ->model(Product::class) ->title(fn($product) => $product->name) ); }
当然,您的应用程序可能具有更复杂的路由配置,这可能很难映射到链接解析器。此包提供了许多高级解析器设置功能,可以满足您的需求,但您也可以扩展附带的特性或编写自己的解析器。
注册链接解析器
WIP。
编辑和存储链接引用
WIP。
解析链接 URL
如上所述,链接可以以多种方式存储,具体取决于您的用例。以下是一些常见方法,应能帮助您入门。
使用 Link
实例化方法
WIP
使用 Links
门面
WIP
使用 Str
门面或 str()
助手
WIP
使用 Blade 指令
WIP
使用模型属性转换
请注意,模型属性转换可能会对专门的链接编辑组件产生意外的副作用,因为它们可能会依赖于属性的原始值(即“带有未解析的链接引用”)来工作。
使用内联链接引用(内联标签)转换文本内容
ResolvedInlineLinkTagsString
强制类型转换在模型具有包含内联链接引用(也称为“内联标签”)的编辑内容属性时非常有用,这些引用都需要一次性解决。
use Illuminate\Database\Eloquent\Model; use Whitecube\Links\Casts\ResolvedInlineLinkTagsString; class Post extends Model { protected $casts = [ 'content' => ResolvedInlineLinkTagsString::class, ]; }
例如,一个包含以下字符串的content
属性
Hello, welcome to my website! Take a look at my [woodworking skills](#link[services.item@woodworking]) or [learn more about me](#link[about]).
将被转换成
Hello, welcome to my website! Take a look at my [woodworking skills](https://my-shop.com/services/professional-woodworking/) or [learn more about me](https://my-shop.com/about-me/).
报告链接解析问题
WIP。
开发路线图
链接是万维网的基础。本包旨在“对象化”并统计项目的内部URL,这为未来的功能和更新打开了众多可能性。
- 列出可用的链接解析器;
- 从链接引用/对象生成URL;
- 为选择器和专业表单UI组件生成可用的具体链接完整列表;
- 用解析后的URL值替换内联链接引用;
- 使用
@link()
blade指令生成URL; - 直接在Laravel的路由上定义链接解析器;
- 在模型中转换链接对象;
- 报告无法解析的链接引用;
- 根据链接库存生成XML站点地图;
- 将URL逆向工程为详细的链接对象;
需要上述未检查的功能吗?或者想添加此列表中的项目?请提交问题或PR,我们会查看它!但请记住,如果您需要专业支持,请不要忘记赞助我们!🤗
🔥 赞助
如果您在生产应用中依赖于此包,请考虑赞助我们!这是帮助我们继续做我们热爱的事情:制作优秀的开源软件的最好方式。
贡献
请随意提出更改建议、请求新功能或自行修复错误。我们相信还有很多可以改进的地方,我们非常乐意合并有用的pull requests。谢谢!
用❤️为开源制作
在Whitecube,我们每天的工作中都使用了大量的开源软件。因此,当我们有机会回馈时,我们感到非常兴奋!
我们希望您会喜欢我们从我们这里的小贡献,如果您在项目中发现它有用,我们非常愿意听到您的反馈。在Twitter上关注我们,获取更多更新!