【问题标题】:Laravel and variable naming conventions (snake case + camel case)Laravel 和变量命名约定(snake case + camel case)
【发布时间】:2016-07-29 08:08:58
【问题描述】:

我们遵循 Laravel 将模型属性命名为 snake_case_variables 的标准。虽然 Laravel 只是我们系统中与 Javascript 前端和许多其他应用程序对话的 API 层。

我们 API 的所有使用者都强烈偏爱驼峰式变量(例如 javascript / React)。

我们发现很难更改核心模型属性,例如created_at、updated_at、confirmation_password、模型关系等进入蛇形案例。

我们已经玩弄并实现了变换层来改变“外壳”的进出,尽管这只是增加了维护和开发人员要记住的另一件事......

我们如何轻松地将所有模型属性、关系和通用 Laravel 绑定转换为驼峰式?

【问题讨论】:

  • 如果将这些属性保留为snake_case,这些消费者会抛出错误还是无法读取这些属性?在第二种情况下,可能有一个解决方案,在第一种情况下,没有简单的解决方法。

标签: javascript php laravel reactjs naming-conventions


【解决方案1】:

我不推荐,因为它更改了 laravel 的核心,因此它修改了供应商文件,并且在不丢失更改的情况下不容易更新,但我认为最简单的方法是替换vendor\laravel\framework\src\illuminate\Support\Str.php 带有修改版本。 laravel 对该文件中的方法执行对 studly、camel case、snake case 等的所有字符串修改。遍历函数会改变函数的执行方式,但我认为这没有意义,因为方法名称与它们正在执行的内容不匹配。

最好但困难的方法是进入每个正在使用 Str 类中的方法并根据您的需要进行修改的文件,这将是有意义的,但是您需要做很多工作来更改现有的方法正在使用。

从这些文件中更改所需的值。

请参阅 vendor\laravel\framework\src\Database\Eloquent\Model.php 您还可以看到这些值已在此处设置用于从模型中检查。

public static $manyMethods = ['belongsToMany', 'morphToMany', 'morphedByMany'];
const CREATED_AT = 'created_at';
const UPDATED_AT = 'updated_at';

请参阅 vendor\laravel\framework\src\Database\Schema\Blueprint.php 您还可以看到这些值在此处设置,用于检查创建迁移和删除迁移。例如创建时间戳的那个。

public function timestamps()
{
    $this->timestamp('created_at')->nullable();

    $this->timestamp('updated_at')->nullable();
}

【讨论】:

    【解决方案2】:

    你一定要看看Mappable。我们有同样的问题,这解决了它。您可以将 snake_case 映射到 CamelCase 名称,甚至可以在 QueryBuilder 中使用它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多