Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
105 commits
Select commit Hold shift + click to select a range
aa34e8b
fix version string
eli-darkly Jul 16, 2018
6a08f47
Merge pull request #26 from launchdarkly/3.2.1
eli-darkly Jul 16, 2018
0d4fc33
add new version of allFlags() that captures more metadata
eli-darkly Aug 20, 2018
0f76969
linter
eli-darkly Aug 20, 2018
9023ea6
missing array key guard
eli-darkly Aug 21, 2018
e215364
missing array key guards
eli-darkly Aug 21, 2018
30e9e3c
use the standard method for specifying custom JSON serialization
eli-darkly Aug 21, 2018
775f0a1
indents
eli-darkly Aug 21, 2018
c1ac079
Merge pull request #27 from launchdarkly/eb/ch22308/all-flags-state
eli-darkly Aug 21, 2018
2f80b4c
add ability to filter for client-side flags only
eli-darkly Aug 21, 2018
fd08375
fix test to fill in all required flag fields
eli-darkly Aug 21, 2018
42c1ff2
Merge pull request #28 from launchdarkly/eb/ch12124/client-side-filter
eli-darkly Aug 22, 2018
2e9829c
implement evaluation with explanations
eli-darkly Aug 24, 2018
5d8e2b0
add another evaluation test
eli-darkly Aug 24, 2018
1977097
linter
eli-darkly Aug 24, 2018
54759db
fix test method
eli-darkly Aug 25, 2018
5038b0d
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Aug 25, 2018
87417f1
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Aug 27, 2018
07eb1a7
Merge branch 'explanation' into eb/ch19976/explanations
eli-darkly Aug 29, 2018
39d5105
fix for ch22995 - include prereq value in event even if prereq is off
eli-darkly Aug 29, 2018
8391618
Merge pull request #29 from launchdarkly/eb/ch19976/explanations
eli-darkly Sep 4, 2018
180679f
cache flag data in allFlags
eli-darkly Sep 24, 2018
15720d0
rm unused imports
eli-darkly Sep 24, 2018
dd7f268
Merge pull request #30 from launchdarkly/eb/ch24369/all-flags-caching
eli-darkly Sep 25, 2018
08572c9
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Sep 25, 2018
d3c3932
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Sep 26, 2018
a2598c7
add option to reduce front-end metadata for untracked flags
eli-darkly Oct 5, 2018
78ed55f
Merge pull request #31 from launchdarkly/eb/ch24449/less-metadata
eli-darkly Nov 8, 2018
440a2ad
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Nov 21, 2018
7543cf3
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Nov 26, 2018
37e7eaf
add ability to load flags from a file
eli-darkly Jan 10, 2019
4b2f9ef
linter
eli-darkly Jan 10, 2019
226fd95
data completeness
eli-darkly Jan 10, 2019
e997d9f
more data fixes
eli-darkly Jan 10, 2019
804a170
more data fixes
eli-darkly Jan 10, 2019
5f74cb2
more data fixes
eli-darkly Jan 10, 2019
4587c04
readme link
eli-darkly Jan 10, 2019
4ae2bd9
rm unused parameters
eli-darkly Jan 10, 2019
529ec43
fix incorrect doc comment
eli-darkly Jan 10, 2019
96dc0b4
add DynamoDB integration
eli-darkly Jan 23, 2019
ea3268e
fix test config
eli-darkly Jan 23, 2019
5da57f3
fix string check
eli-darkly Jan 23, 2019
aa62488
readme
eli-darkly Jan 23, 2019
d8bcfbb
fix test data
eli-darkly Jan 23, 2019
895aa33
factor out base class, implement caching, make configuration simpler
eli-darkly Jan 23, 2019
10662d5
fix comment
eli-darkly Jan 23, 2019
2ee0e9e
rm unused const
eli-darkly Jan 23, 2019
1eeb153
can't scope constants
eli-darkly Jan 23, 2019
c82b7c7
linter
eli-darkly Jan 23, 2019
6aead62
add Consul integration
eli-darkly Jan 23, 2019
3887732
typo
eli-darkly Jan 24, 2019
10e0daf
regenerate lockfile using PHP 5.5
eli-darkly Jan 24, 2019
2ea5c52
Merge pull request #32 from launchdarkly/eb/ch26319/file-data-source
eli-darkly Jan 24, 2019
200229c
we need at least version 2.1 of the Consul package
eli-darkly Jan 24, 2019
1a7cd19
update lockfile
eli-darkly Jan 24, 2019
d2461d2
Merge branch 'master' into eb/ch28330/dynamodb
eli-darkly Jan 24, 2019
dd92f7f
Merge branch 'eb/ch28330/dynamodb' into eb/ch28432/consul
eli-darkly Jan 24, 2019
313a473
rm comment
eli-darkly Jan 24, 2019
2580f6f
remove lockfile
eli-darkly Jan 24, 2019
72f0ac8
add delay for creating test table
eli-darkly Jan 24, 2019
546bc1c
Merge branch 'eb/ch28330/dynamodb' into eb/ch28432/consul
eli-darkly Jan 24, 2019
fd536a5
move feature requester code into Integrations namespace
eli-darkly Jan 24, 2019
a8c1647
linter
eli-darkly Jan 24, 2019
f192e9a
misc test fixes
eli-darkly Jan 24, 2019
d1a2e41
Merge pull request #35 from launchdarkly/eb/ch30532/lockfile
eli-darkly Jan 25, 2019
c7f98fd
fix apc/apcu calls
eli-darkly Jan 25, 2019
9ff5c89
Merge branch 'master' into eb/ch28330/dynamodb
eli-darkly Jan 25, 2019
088aef2
Merge pull request #33 from launchdarkly/eb/ch28330/dynamodb
eli-darkly Jan 25, 2019
6f05a0f
Merge branch 'master' into eb/ch28432/consul
eli-darkly Jan 25, 2019
a49b3c1
fix comment
eli-darkly Jan 25, 2019
22498a0
Merge branch 'eb/ch28432/consul' into eb/ch30533/feature-requesters
eli-darkly Jan 25, 2019
24cf9e0
fix deprecated caching store classes
eli-darkly Jan 25, 2019
a9100fc
better caching abstraction
eli-darkly Jan 25, 2019
80a653b
typo
eli-darkly Jan 25, 2019
47c1bc2
linter
eli-darkly Jan 25, 2019
f6cf050
fix namespaces
eli-darkly Jan 25, 2019
55dd858
fix tests
eli-darkly Jan 25, 2019
17cca84
Merge pull request #36 from launchdarkly/eb/ch28432/consul
eli-darkly Jan 25, 2019
528fc91
doc fixes
eli-darkly Jan 25, 2019
68c81fb
move a bunch more stuff
eli-darkly Jan 26, 2019
613f881
misc cleanup
eli-darkly Jan 26, 2019
6d37fdd
add test for not having any flags
eli-darkly Jan 26, 2019
4014e19
restore documentation for deprecated properties
eli-darkly Jan 31, 2019
15b780d
Merge pull request #37 from launchdarkly/eb/ch30533/feature-requesters
eli-darkly Jan 31, 2019
86bc30f
version 3.5.0
eli-darkly Jan 31, 2019
5d092f0
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Feb 6, 2019
9c589d1
revert accidental commit
eli-darkly Feb 27, 2019
f533573
Merge commit 'b34a45325c615db18fde2038ea3e627e9d6d80ff'
eli-darkly Mar 13, 2019
87dadb3
Hr/ch34492/waitonconsul (#39)
hroederld Mar 26, 2019
30f10c8
coerce user attributes to strings when necessary, don't send events w…
eli-darkly Apr 2, 2019
2d3120b
explanatory comments
eli-darkly Apr 3, 2019
1f6cd8b
Merge pull request #40 from launchdarkly/eb/ch35189-35206/stringify-a…
eli-darkly Apr 3, 2019
f2783b3
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Apr 3, 2019
6d5ed05
add release script (version update only)
eli-darkly Apr 11, 2019
aa94ab4
Merge pull request #41 from launchdarkly/eb/ch36538/release-script
eli-darkly Apr 11, 2019
aa29430
use newer readme footer format
eli-darkly Apr 11, 2019
4199948
merge from public after release
LaunchDarklyCI Apr 12, 2019
3e46f1a
add param to skip db tests, update docs for new repo name
eli-darkly Apr 25, 2019
ff1a19d
wrong method name
eli-darkly Apr 25, 2019
999660a
Merge pull request #43 from launchdarkly/eb/ch37610/allow-skip-db-tests
eli-darkly Apr 25, 2019
f224cfc
Merge branch 'master' of github.com:launchdarkly/php-client
eli-darkly Apr 25, 2019
86eefb3
add tests for rollout calculations, + misc test cleanup
eli-darkly Apr 25, 2019
a736ec4
Merge pull request #44 from launchdarkly/eb/ch37607-ch37636/rollout-t…
eli-darkly Apr 26, 2019
0e212b7
misc doc fixes
eli-darkly Apr 26, 2019
9b99cd7
misc doc fixes
eli-darkly Apr 26, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 36 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,37 @@
Contributing to the LaunchDarkly SDK for PHP
================================================
# Contributing to the LaunchDarkly Server-Side SDK for PHP

We encourage pull-requests and other contributions from the community. We've also published an [SDK contributor's guide](http://docs.launchdarkly.com/docs/sdk-contributors-guide) that provides a detailed explanation of how our SDKs work.
LaunchDarkly has published an [SDK contributor's guide](https://docs.launchdarkly.com/docs/sdk-contributors-guide) that provides a detailed explanation of how our SDKs work. See below for additional information on how to contribute to this SDK.

## Submitting bug reports and feature requests

The LaunchDarkly SDK team monitors the [issue tracker](https://github.com/launchdarkly/php-server-sdk/issues) in the SDK repository. Bug reports and feature requests specific to this SDK should be filed in this issue tracker. The SDK team will respond to all newly filed issues within two business days.

## Submitting pull requests

We encourage pull requests and other contributions from the community. Before submitting pull requests, ensure that all temporary or unintended code is removed. Don't worry about adding reviewers to the pull request; the LaunchDarkly SDK team will add themselves. The SDK team will acknowledge all pull requests within two business days.

## Build instructions

### Prerequisites

The project uses [Composer](https://getcomposer.org/).

### Installing dependencies

From the project root directory:

```
composer install
```

### Testing

To run all unit tests:

```
phpunit
```

By default, the full unit test suite includes live tests of the integrations for Consul, DynamoDB, and Redis. Those tests expect you to have instances of all of those databases running locally. To skip them, set the environment variable `LD_SKIP_DATABASE_TESTS=1` before running the tests.

It is preferable to run tests against all supported minor versions of PHP (as described in `README.md` under Requirements), or at least the lowest and highest versions, prior to submitting a pull request. However, LaunchDarkly's CI tests will run automatically against all supported versions.
149 changes: 16 additions & 133 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,151 +1,34 @@
LaunchDarkly SDK for PHP
===========================
# LaunchDarkly Server-side SDK for PHP

[![Circle CI](https://circleci.com/gh/launchdarkly/php-client.svg?style=svg)](https://circleci.com/gh/launchdarkly/php-client)
[![Circle CI](https://img.shields.io/circleci/project/launchdarkly/php-server-sdk.png)](https://circleci.com/gh/launchdarkly/php-server-sdk)

Requirements
------------
1. PHP 5.5 or higher.
## LaunchDarkly overview

Quick setup
-----------
[LaunchDarkly](https://www.launchdarkly.com) is a feature management platform that serves over 100 billion feature flags daily to help teams build better software, faster. [Get started](https://docs.launchdarkly.com/docs/getting-started) using LaunchDarkly today!

[![Twitter Follow](https://img.shields.io/twitter/follow/launchdarkly.svg?style=social&label=Follow&maxAge=2592000)](https://twitter.com/intent/follow?screen_name=launchdarkly)

1. Install the PHP SDK and monolog for logging with [Composer](https://getcomposer.org/)
## Supported PHP versions

php composer.phar require launchdarkly/launchdarkly-php
This version of the LaunchDarkly SDK is compatible with PHP 5.5 and higher.

1. After installing, require Composer's autoloader:
## Getting started

require 'vendor/autoload.php';
Refer to the [SDK reference guide](https://docs.launchdarkly.com/docs/php-sdk-reference) for instructions on getting started with using the SDK.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


1. Create a new LDClient with your SDK key:
## Learn more

$client = new LaunchDarkly\LDClient("your_sdk_key");

Your first feature flag
-----------------------

1. Create a new feature flag on your [dashboard](https://app.launchdarkly.com)

2. In your application code, use the feature's key to check whether the flag is on for each user:

$user = new LaunchDarkly\LDUser("user@test.com");
if ($client->variation("your.flag.key", $user)) {
# application code to show the feature
} else {
# the code to run if the feature is off
}

Fetching flags
--------------

There are two distinct methods of integrating LaunchDarkly in a PHP environment.

* [Guzzle Cache Middleware](https://github.com/Kevinrob/guzzle-cache-middleware) to request and cache HTTP responses in an in-memory array (default)
* [ld-relay](https://github.com/launchdarkly/ld-relay) to retrieve and store flags in Redis (recommended)

We strongly recommend using the ld-relay. Per-flag caching (Guzzle method) is only intended for low-throughput environments.

Using Guzzle
============

Require Guzzle as a dependency:

php composer.phar require "guzzlehttp/guzzle:6.2.1"
php composer.phar require "kevinrob/guzzle-cache-middleware:1.4.1"

It will then be used as the default way of fetching flags.

With Guzzle, you could persist your cache somewhere other than the default in-memory store, like Memcached or Redis. You could then specify your cache when initializing the client with the [cache option](https://github.com/launchdarkly/php-client/blob/master/src/LaunchDarkly/LDClient.php#L44).

$client = new LaunchDarkly\LDClient("YOUR_SDK_KEY", array("cache" => $cacheStorage));


Using LD-Relay
==============

The LaunchDarkly Relay Proxy ([ld-relay](https://github.com/launchdarkly/ld-relay)) consumes the LaunchDarkly streaming API and can update a database cache operating in your production environment. The ld-relay offers many benefits such as performance and feature flag consistency. With PHP applications, we strongly recommend setting up ld-relay with a database store. The database can be Redis, Consul, or DynamoDB. (For more about using LaunchDarkly with databases, see the [SDK reference guide](https://docs.launchdarkly.com/v2.0/docs/using-a-persistent-feature-store).)

1. Set up ld-relay in [daemon-mode](https://github.com/launchdarkly/ld-relay#redis-storage-and-daemon-mode) with Redis

2. Add the necessary dependency for the chosen database.

For Redis:

php composer.phar require "predis/predis:1.0.*"

For Consul:

php composer.phar require "sensiolabs/consul-php-sdk:2.*"

For DynamoDB:

php composer.phar require "aws/aws-sdk-php:3.*"

3. Create the LDClient with the appropriate parameters for the chosen database. These examples show all of the available options.

For Redis:

$client = new LaunchDarkly\LDClient("your_sdk_key", [
'feature_requester' => LaunchDarkly\Integrations\Redis::featureRequester(),
'redis_host' => 'your.redis.host', // defaults to "localhost" if not specified
'redis_port' => 6379, // defaults to 6379 if not specified
'redis_timeout' => 5, // connection timeout in seconds; defaults to 5
'redis_prefix' => 'env1' // corresponds to the prefix setting in ld-relay
'predis_client' => $myClient // use this if you have already configured a Predis client instance
]);

For Consul:

$client = new LaunchDarkly\LDClient("your_sdk_key", [
'feature_requester' => LaunchDarkly\Integrations\Consul::featureRequester(),
'consul_uri' => 'http://localhost:8500', // this is the default
'consul_prefix' => 'env1', // corresponds to the prefix setting in ld-relay
'consul_options' => array(), // you may pass any options supported by the Guzzle client
'apc_expiration' => 30 // expiration time for local caching, if you have apcu installed
]);

For DynamoDB:

$client = new LaunchDarkly\LDClient("your_sdk_key", [
'feature_requester' => LaunchDarkly\Integrations\DynamoDb::featureRequester(),
'dynamodb_table' => 'your.table.name', // required
'dynamodb_prefix' => 'env1', // corresponds to the prefix setting in ld-relay
'dynamodb_options' => array(), // you may pass any options supported by the AWS SDK
'apc_expiration' => 30 // expiration time for local caching, if you have apcu installed
]);

4. If you are using DynamoDB, you must create your table manually. It must have a partition key called "namespace", and a sort key called "key" (both strings). Note that by default the AWS SDK will attempt to get your AWS credentials and region from environment variables and/or local configuration files, but you may also specify them in `dynamodb_options`.

5. If ld-relay is configured for [event forwarding](https://github.com/launchdarkly/ld-relay#event-forwarding), you can configure the LDClient to publish events to ld-relay instead of directly to `events.launchdarkly.com`. Using the `Guzzle` implementation of event publishing with ld-relay event forwarding can be an efficient alternative to the default `curl`-based event publishing.

To forward events, add the following configuration properties to the configuration shown above:

'event_publisher' => LaunchDarkly\Integrations\Guzzle::eventPublisher(),
'events_uri' => 'http://your-ldrelay-host:8030'

Using flag data from a file
---------------------------

For testing purposes, the SDK can be made to read feature flag state from a file or files instead of connecting to LaunchDarkly. See [`LaunchDarkly\Integrations\Files`](https://github.com/launchdarkly/php-client/blob/master/src/LaunchDarkly/Integrations/Files.php) and ["Reading flags from a file"](https://docs.launchdarkly.com/docs/reading-flags-from-a-file).
Check out our [documentation](http://docs.launchdarkly.com) for in-depth instructions on configuring and using LaunchDarkly. You can also head straight to the [complete reference guide for this SDK](http://docs.launchdarkly.com/docs/php-sdk-reference).

Testing
-------
## Testing

We run integration tests for all our SDKs using a centralized test harness. This approach gives us the ability to test for consistency across SDKs, as well as test networking behavior in a long-running application. These tests cover each method in the SDK, and verify that event sending, flag evaluation, stream reconnection, and other aspects of the SDK all behave correctly.

Learn more
-----------

Check out our [documentation](http://docs.launchdarkly.com) for in-depth instructions on configuring and using LaunchDarkly. You can also head straight to the [complete reference guide for this SDK](http://docs.launchdarkly.com/docs/php-sdk-reference).

Contributing
------------
## Contributing

We encourage pull-requests and other contributions from the community. We've also published an [SDK contributor's guide](http://docs.launchdarkly.com/docs/sdk-contributors-guide) that provides a detailed explanation of how our SDKs work.
We encourage pull requests and other contributions from the community. Check out our [contributing guidelines](CONTRIBUTING.md) for instructions on how to contribute to this SDK.

About LaunchDarkly
------------------
## About LaunchDarkly

* LaunchDarkly is a continuous delivery platform that provides feature flags as a service and allows developers to iterate quickly and safely. We allow you to easily flag your features and manage them from the LaunchDarkly dashboard. With LaunchDarkly, you can:
* Roll out a new feature to a subset of your users (like a group of users who opt-in to a beta tester group), gathering feedback and bug reports from real-world use cases.
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"launchdarkly",
"launchdarkly php"
],
"homepage": "https://github.com/launchdarkly/php-client",
"homepage": "https://github.com/launchdarkly/php-server-sdk",
"license": "Apache-2.0",
"authors": [
{
Expand Down
4 changes: 2 additions & 2 deletions scripts/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
# When done you should commit and push the changes made.

set -uxe
echo "Starting php-client release (version update only)"
echo "Starting php-server-sdk release (version update only)"

VERSION=$1

Expand All @@ -22,4 +22,4 @@ LDCLIENT_PHP_TEMP=./LDClient.php.tmp
sed "s/const VERSION = '.*'/const VERSION = '${VERSION}'/g" $LDCLIENT_PHP > $LDCLIENT_PHP_TEMP
mv $LDCLIENT_PHP_TEMP $LDCLIENT_PHP

echo "Done with php-client release (version update only)"
echo "Done with php-server-sdk release (version update only)"
11 changes: 9 additions & 2 deletions tests/ConsulFeatureRequesterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,15 @@ class ConsulFeatureRequesterTest extends FeatureRequesterTestBase

public static function setUpBeforeClass()
{
$sf = new ServiceFactory();
self::$kvClient = $sf->get('kv');
if (!static::isSkipDatabaseTests()) {
$sf = new ServiceFactory();
self::$kvClient = $sf->get('kv');
}
}

protected function isDatabaseTest()
{
return true;
}

protected function makeRequester()
Expand Down
11 changes: 9 additions & 2 deletions tests/DynamoDbFeatureRequesterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,15 @@ class DynamoDbFeatureRequesterTest extends FeatureRequesterTestBase

public static function setUpBeforeClass()
{
self::$dynamoDbClient = new DynamoDbClient(self::makeDynamoDbOptions());
self::createTableIfNecessary();
if (!static::isSkipDatabaseTests()) {
self::$dynamoDbClient = new DynamoDbClient(self::makeDynamoDbOptions());
self::createTableIfNecessary();
}
}

protected function isDatabaseTest()
{
return true;
}

private static function makeDynamoDbOptions()
Expand Down
Loading