zschuessler / laravel-route-to-class
一个Laravel视图组合器,它将当前路由转换为body类。'admin/product/5/edit'变为'admin-product-edit'
Requires
- illuminate/support: 5.3.*||5.4.*||5.5.*||5.6.*||5.7.*||5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0 || ^11.0
README
Laravel的动态body类
根据您设置的规则快速为您的Laravel应用添加body类。
实现示例
- 以访客身份浏览可能会添加
user-isGuest
类。 - 浏览管理面板可能会添加
admin-panel
类。 - 所有用户个人资料路由可能都有
user-profile
类。
编写自己的规则非常容易!您可以选择编写自己的生成器类或通过直接与库单例交互使用临时API。
快速开始
在您的composer设置中要求该包。
composer require zschuessler/laravel-route-to-class
发布配置文件
在您的项目根目录中运行以下命令
php artisan vendor:publish --provider="Zschuessler\RouteToClass\ServiceProvider"
在布局中使用
您可以使用包含的Blade指令,或者直接访问Route2Class外观来输出您的类。
Blade
使用Blade指令的两个重要注意事项
- Blade指令将遵循您设置的任何缓存解决方案。这对于生产环境来说很棒,但请记住,在开发过程中,您可能正在查看修改生成器时缓存的类。
- Blade指令在所有其他视图模板代码之前运行。因此,在视图中对Route2Class包的任何调用都不会出现在类列表中。
<body class="@route2class_generate_classes"></body>
外观
外观不像Blade指令那样进行缓存,这使得它们非常适合开发环境。并且因为我们没有使用Blade指令,您还可以在视图模板中修改类和生成器。
这样在任何视图中使用它
<?php // This is now possible, too: \Route2Class::addClass('test'); ?> <body class="{{ \Route2Class::generateClassString(); }}"></body>
实现您的规则
您可以通过两种方法之一实现自己的规则。
创建生成器文件
这是首选方法,因为您将始终知道您的类修改器(称为生成器)将位于何处。
首先决定您希望将生成器保存在哪里。为了本例的目的,我们将使用以下目录
app/Providers/RouteToClass/UserTypeGenerator.php
您只需扩展GeneratorAbstract.php
文件并实现一个返回类字符串的方法。下面是一个简单的示例
<?php namespace App\Providers\RouteToClass; use Zschuessler\RouteToClass\Generators\GeneratorAbstract; class UserTypeGenerator extends GeneratorAbstract { public function generateClassName() { // Use your own logic here to determine user type $userType = 'admin'; return 'user-' . $userType; } }
接下来,在您的/config/route2class.php
配置中添加对生成器的引用
App\Providers\RouteToClass\UserTypeGenerator::class,
现在当您在视图模板中调用外观或Blade指令时,您将看到类user-admin
- 很酷!
查看此文件以获取真实生成器示例
https://github.com/zschuessler/laravel-route-to-class/blob/master/src/Generators/FullRoutePath.php
临时类添加
您可以直接通过在提供者上调用addClass
方法与body类交互。
以下是一个使用默认Laravel项目路由文件的示例
Route::get('/', function () { // Add static class as string Route2Class::addClass('homepage'); // Add class from anonymous function Route2Class::addClass(function() { // Your custom logic goes here return 'my-anon-class-name'; }); return view('welcome'); });
您可以在任何地方调用addClass
方法 - 模型、控制器等。请考虑添加生成器文件,因为它促进了应用程序的可维护性和减少了技术债务。
演示项目
下面的演示项目遵循上述示例
https://github.com/zschuessler/route2class-demo
许可证
这是公有领域。做你想做的事。