Laravel 11 简化配置文件
发布日期:作者: JMac
Laravel 11 中我最喜欢的功能之一是简化的配置文件。在 Laravel 11 的开发过程中,所有配置文件都从默认的 Laravel 安装中删除了。然而,在发布前的几周,Taylor 决定重新包含一个精简版本的配置文件,但保留了删除任何不需要的文件或选项的选项。
让我们深入了解一下它是如何工作的,以避免错误并获得尽可能精简的应用程序。毕竟,配置文件会给你的应用程序增加很多噪音。你也要小心,确保它们是最新的,因为它们一直在变化。这种组合是我很高兴在 Laravel 11 中看到这个功能的原因。
在内部,Laravel 将您的配置文件与框架默认值合并。因此,如果您的应用程序有一个 config/database.php
文件,它将与 Laravel 的内部 config/database.php
文件合并。
这里有趣的是合并。从表面上看,这会合并顶层选项(浅层合并)。这意味着您可以通过删除任何不使用的顶层选项来进一步精简您的配置文件。同样,您配置文件中的任何选项都会自动与 Laravel 默认值合并。
让我们看一个简单的例子,使用 Laravel 11 应用程序中的以下 config/app.php
文件
<?php return [ 'timezone' => 'America/Kentucky/Louisville', 'custom_option' => 'foo' ];
最终的配置将是所有核心 app
配置选项(app.name
、app.env
、app.debug
等),其中 app.timezone
被覆盖,并且您的 app.custom_option
被添加。
这种合并对于具有顶层选项的文件效果很好。但是,一些配置文件有嵌套的“驱动程序”选项。
Laravel 在执行此合并时会做更多的事情。虽然它不是递归的,但 Laravel 会合并一些常见的嵌套选项。例如,database.connections
、filesystem.disks
,以及更多。
有了这种额外的合并,您就不需要包含 database.connections
下的所有驱动程序(因为它是一个顶层选项),您就可以精简此部分,只保留您使用的驱动程序。
例如,如果您使用默认的 testing
和 mysql
数据库驱动程序,但 Laravel 11 中还有一个自定义的 mysql_replica
驱动程序,那么您的 config/database.php
文件可能是
<?php return [ 'connections' => [ 'mysql_replica' => [ 'driver' => 'mysql', 'url' => env('DB_REPLICA_URL'), 'host' => env('DB_REPLICA_HOST', '127.0.0.1'), 'port' => env('DB_REPLICA_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_REPLICA_USERNAME', 'root'), 'password' => env('DB_REPLICA_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => env('DB_CHARSET', 'utf8mb4'), 'collation' => env('DB_COLLATION', 'utf8mb4_0900_ai_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], ] ];
当然,欢迎您保留所有默认配置文件及其所有选项。但是,如果您喜欢 Laravel 新的、更精简的应用程序结构,并希望将配置文件中的噪音减少到您真正的自定义配置,那么这就是最佳方法。