Skip to navigation

Adding custom code

View as Markdown
Enterprise feature

This feature is available only for the Enterprise plan. To get started, reach out to support@buildwithfern.com.

This page covers how to add custom logic, methods, and dependencies to your PHP SDK.

Adding custom logic

To get started adding custom code:

These steps cover adding a new custom file to the SDK. To preserve line-level edits to a generated file, use Replay instead.
1

Create a new file and add your custom logic

src/Helper.php
<?php
namespace YourNamespace;
class Helper
{
public static function myHelper(): void
{
echo "Hello World!";
}
}
2

Add your file to .fernignore

.fernignore
# Specify files that shouldn't be modified by Fern
src/Helper.php
3

Consume the helper

Now your users can consume the helper function by importing it from the SDK.

<?php
use YourNamespace\Helper;
Helper::myHelper();

Adding custom SDK methods

Fern also allows you to add custom methods to the SDK itself (e.g. client.my_method() ) by inheriting the Fern generated client and then extending it.

1

Update sdk-config.yml configuration

Name your Fern-generated client something like BaseClient to reflect that this client will be extended.

sdk-config.yml
targets:
- language: php
generation:
naming:
clientName: BaseClient
2

Import and extend the generated client

First, import the Fern generated base client and extend it. Then, add whatever methods you want.

src/MyClient.php
<?php
namespace YourNamespace;
class MyClient extends BaseClient
{
public function myHelper(): void
{
echo "Hello World!";
}
}
3

Update .fernignore

Add the MyClient.php to .fernignore.

.fernignore
+ src/MyClient.php
4

Consume the method

Instead of constructing the generated client, your users will want to construct the extended client.

<?php
use YourNamespace\MyClient;
$client = new MyClient();

Now your users can consume the helper function by importing it from the SDK.

$client->myHelper();

Adding custom dependencies

To add packages that your custom code requires, list them in the target’s package.extraDependencies and package.extraDevDependencies in sdk-config.yml.

sdk-config.yml
targets:
- language: php
package:
extraDependencies:
- name: guzzlehttp/guzzle
version: "^7.0"
extraDevDependencies:
- name: phpunit/phpunit
version: "^10.0"