php.packages: Make packages overridable

This will allow patching extensions without having to manually having to patch all occurrences in the dependency tree.

Changed files
+20 -1
doc
languages-frameworks
pkgs
development
interpreters
+18
doc/languages-frameworks/php.section.md
···
enabled ++ (with all; [ imagick redis ]))
).packages.composer
```
···
enabled ++ (with all; [ imagick redis ]))
).packages.composer
```
+
+
### Overriding PHP packages {#ssec-php-user-guide-overriding-packages}
+
+
`php-packages.nix` form a scope, allowing us to override the packages defined within. For example, to apply a patch to a `mysqlnd` extension, you can simply pass an overlay-style function to `php`’s `packageOverrides` argument:
+
+
```nix
+
php.override {
+
packageOverrides = final: prev: {
+
extensions = prev.extensions // {
+
mysqlnd = prev.extensions.mysqlnd.overrideAttrs (attrs: {
+
patches = attrs.patches or [] ++ [
+
+
];
+
});
+
};
+
};
+
}
+
```
+2 -1
pkgs/development/interpreters/php/generic.nix
···
, version
, sha256
, extraPatches ? []
# Sapi flags
, cgiSupport ? true
···
php-packages = (callPackage ../../../top-level/php-packages.nix {
phpPackage = phpWithExtensions;
-
});
allExtensionFunctions = prevExtensionFunctions ++ [ extensions ];
enabledExtensions =
···
, version
, sha256
, extraPatches ? []
+
, packageOverrides ? (final: prev: {})
# Sapi flags
, cgiSupport ? true
···
php-packages = (callPackage ../../../top-level/php-packages.nix {
phpPackage = phpWithExtensions;
+
}).overrideScope' packageOverrides;
allExtensionFunctions = prevExtensionFunctions ++ [ extensions ];
enabledExtensions =