zschuessler/laravel-route-to-class

一个Laravel视图组合器,它将当前路由转换为body类。'admin/product/5/edit'变为'admin-product-edit'

2.13.0 2024-07-02 16:33 UTC

README

Alt text

Laravel的动态body类

根据您设置的规则快速为您的Laravel应用添加body类。

实现示例

  1. 以访客身份浏览可能会添加user-isGuest类。
  2. 浏览管理面板可能会添加admin-panel类。
  3. 所有用户个人资料路由可能都有user-profile类。

编写自己的规则非常容易!您可以选择编写自己的生成器类或通过直接与库单例交互使用临时API。

快速开始

在您的composer设置中要求该包。

composer require zschuessler/laravel-route-to-class

发布配置文件

在您的项目根目录中运行以下命令

php artisan vendor:publish --provider="Zschuessler\RouteToClass\ServiceProvider"

在布局中使用

您可以使用包含的Blade指令,或者直接访问Route2Class外观来输出您的类。

Blade

使用Blade指令的两个重要注意事项

  1. Blade指令将遵循您设置的任何缓存解决方案。这对于生产环境来说很棒,但请记住,在开发过程中,您可能正在查看修改生成器时缓存的类。
  2. 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

许可证

这是公有领域。做你想做的事。