This extension provides Flysystem integration for the Yii framework

Overview

Flysystem Extension for Yii 2

Code Quality Packagist Version Total Downloads

This extension provides Flysystem integration for the Yii framework. Flysystem is a filesystem abstraction which allows you to easily swap out a local filesystem for a remote one.

Installation

The preferred way to install this extension is through composer.

Either run

$ composer require creocoder/yii2-flysystem

or add

"creocoder/yii2-flysystem": "0.8.*"

to the require section of your composer.json file.

Configuring

Local filesystem

Configure application components as follows

return [
    //...
    'components' => [
        //...
        'fs' => [
            'class' => 'creocoder\flysystem\LocalFilesystem',
            'path' => '@webroot/files',
        ],
    ],
];

FTP filesystem

Configure application components as follows

return [
    //...
    'components' => [
        //...
        'ftpFs' => [
            'class' => 'creocoder\flysystem\FtpFilesystem',
            'host' => 'ftp.example.com',
            // 'port' => 21,
            // 'username' => 'your-username',
            // 'password' => 'your-password',
            // 'ssl' => true,
            // 'timeout' => 60,
            // 'root' => '/path/to/root',
            // 'permPrivate' => 0700,
            // 'permPublic' => 0744,
            // 'passive' => false,
            // 'transferMode' => FTP_TEXT,
        ],
    ],
];

NULL filesystem

Configure application components as follows

return [
    //...
    'components' => [
        //...
        'nullFs' => [
            'class' => 'creocoder\flysystem\NullFilesystem',
        ],
    ],
];

AWS S3 filesystem

Either run

$ composer require league/flysystem-aws-s3-v3

or add

"league/flysystem-aws-s3-v3": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'awss3Fs' => [
            'class' => 'creocoder\flysystem\AwsS3Filesystem',
            'key' => 'your-key',
            'secret' => 'your-secret',
            'bucket' => 'your-bucket',
            'region' => 'your-region',
            // 'version' => 'latest',
            // 'baseUrl' => 'your-base-url',
            // 'prefix' => 'your-prefix',
            // 'options' => [],
            // 'endpoint' => 'http://my-custom-url'
        ],
    ],
];

Azure filesystem

Add the following to the repositories section of your composer.json

{
    "type": "pear",
    "url": "http://pear.php.net"
}

Either run

$ composer require league/flysystem-azure

or add

"league/flysystem-azure": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'azureFs' => [
            'class' => 'creocoder\flysystem\AzureFilesystem',
            'accountName' => 'your-account-name',
            'accountKey' => 'your-account-key',
            'container' => 'your-container',
        ],
    ],
];

Copy filesystem

Either run

$ composer require league/flysystem-copy

or add

"league/flysystem-copy": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'copyFs' => [
            'class' => 'creocoder\flysystem\CopyFilesystem',
            'consumerKey' => 'your-consumer-key',
            'consumerSecret' => 'your-consumer-secret',
            'accessToken' => 'your-access-token',
            'tokenSecret' => 'your-token-secret',
            // 'prefix' => 'your-prefix',
        ],
    ],
];

Dropbox filesystem

Either run

$ composer require league/flysystem-dropbox

or add

"league/flysystem-dropbox": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'dropboxFs' => [
            'class' => 'creocoder\flysystem\DropboxFilesystem',
            'token' => 'your-token',
            'app' => 'your-app',
            // 'prefix' => 'your-prefix',
        ],
    ],
];

Google Cloud filesystem

Run

$ composer require "superbalist/flysystem-google-storage": "^5.0"

and configure application components as follows

return [
    //...
    'components' => [
        //...
        'googleCloudFs' => [
            'class' => 'creocoder\flysystem\GoogleCloudFilesystem',
            'projectId' => 'GOOGLE_PROJECT_ID',
            'bucket' => 'GOOGLE_BUCKET',
            'keyFilePath' => 'GOOGLE_KEY_FILE_PATH',
        ],
    ],
];

Note: Credential configuration is read from the keyFile.

GridFS filesystem

Either run

$ composer require league/flysystem-gridfs

or add

"league/flysystem-gridfs": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'gridFs' => [
            'class' => 'creocoder\flysystem\GridFSFilesystem',
            'server' => 'mongodb://localhost:27017',
            'database' => 'your-database',
        ],
    ],
];

Rackspace filesystem

Either run

$ composer require league/flysystem-rackspace

or add

"league/flysystem-rackspace": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'rackspaceFs' => [
            'class' => 'creocoder\flysystem\RackspaceFilesystem',
            'endpoint' => 'your-endpoint',
            'region' => 'your-region',
            'username' => 'your-username',
            'apiKey' => 'your-api-key',
            'container' => 'your-container',
            // 'prefix' => 'your-prefix',
        ],
    ],
];

SFTP filesystem

Either run

$ composer require league/flysystem-sftp

or add

"league/flysystem-sftp": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'sftpFs' => [
            'class' => 'creocoder\flysystem\SftpFilesystem',
            'host' => 'sftp.example.com',
            // 'port' => 22,
            'username' => 'your-username',
            'password' => 'your-password',
            'privateKey' => '/path/to/or/contents/of/privatekey',
            // 'timeout' => 60,
            // 'root' => '/path/to/root',
            // 'permPrivate' => 0700,
            // 'permPublic' => 0744,
        ],
    ],
];

WebDAV filesystem

Either run

$ composer require league/flysystem-webdav

or add

"league/flysystem-webdav": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'webdavFs' => [
            'class' => 'creocoder\flysystem\WebDAVFilesystem',
            'baseUri' => 'your-base-uri',
            // 'userName' => 'your-user-name',
            // 'password' => 'your-password',
            // 'proxy' => 'your-proxy',
            // 'authType' => \Sabre\DAV\Client::AUTH_BASIC,
            // 'encoding' => \Sabre\DAV\Client::ENCODING_IDENTITY,
            // 'prefix' => 'your-prefix',
        ],
    ],
];

ZipArchive filesystem

Either run

$ composer require league/flysystem-ziparchive

or add

"league/flysystem-ziparchive": "~1.0"

to the require section of your composer.json file and configure application components as follows

return [
    //...
    'components' => [
        //...
        'ziparchiveFs' => [
            'class' => 'creocoder\flysystem\ZipArchiveFilesystem',
            'path' => '@webroot/files/archive.zip',
            // 'prefix' => 'your-prefix',
        ],
    ],
];

Caching feature

Either run

$ composer require league/flysystem-cached-adapter

or add

"league/flysystem-cached-adapter": "~1.0"

to the require section of your composer.json file and configure fsID application component as follows

return [
    //...
    'components' => [
        //...
        'fsID' => [
            //...
            'cache' => 'cacheID',
            // 'cacheKey' => 'flysystem',
            // 'cacheDuration' => 3600,
        ],
    ],
];

Replication feature

Either run

$ composer require league/flysystem-replicate-adapter

or add

"league/flysystem-replicate-adapter": "~1.0"

to the require section of your composer.json file and configure fsID application component as follows

return [
    //...
    'components' => [
        //...
        'fsID' => [
            //...
            'replica' => 'anotherFsID',
        ],
    ],
];

Global visibility settings

Configure fsID application component as follows

return [
    //...
    'components' => [
        //...
        'fsID' => [
            //...
            'config' => [
                'visibility' => \League\Flysystem\AdapterInterface::VISIBILITY_PRIVATE,
            ],
        ],
    ],
];

Usage

Writing files

To write file

Yii::$app->fs->write('filename.ext', 'contents');

To write file using stream contents

$stream = fopen('/path/to/somefile.ext', 'r+');
Yii::$app->fs->writeStream('filename.ext', $stream);

Updating files

To update file

Yii::$app->fs->update('filename.ext', 'contents');

To update file using stream contents

$stream = fopen('/path/to/somefile.ext', 'r+');
Yii::$app->fs->updateStream('filename.ext', $stream);

Writing or updating files

To write or update file

Yii::$app->fs->put('filename.ext', 'contents');

To write or update file using stream contents

$stream = fopen('/path/to/somefile.ext', 'r+');
Yii::$app->fs->putStream('filename.ext', $stream);

Reading files

To read file

$contents = Yii::$app->fs->read('filename.ext');

To retrieve a read-stream

$stream = Yii::$app->fs->readStream('filename.ext');
$contents = stream_get_contents($stream);
fclose($stream);

Checking if a file exists

To check if a file exists

$exists = Yii::$app->fs->has('filename.ext');

Deleting files

To delete file

Yii::$app->fs->delete('filename.ext');

Reading and deleting files

To read and delete file

$contents = Yii::$app->fs->readAndDelete('filename.ext');

Renaming files

To rename file

Yii::$app->fs->rename('filename.ext', 'newname.ext');

Getting files mimetype

To get file mimetype

$mimetype = Yii::$app->fs->getMimetype('filename.ext');

Getting files timestamp

To get file timestamp

$timestamp = Yii::$app->fs->getTimestamp('filename.ext');

Getting files size

To get file size

$timestamp = Yii::$app->fs->getSize('filename.ext');

Creating directories

To create directory

Yii::$app->fs->createDir('path/to/directory');

Directories are also made implicitly when writing to a deeper path

Yii::$app->fs->write('path/to/filename.ext');

Deleting directories

To delete directory

Yii::$app->fs->deleteDir('path/to/filename.ext');

Managing visibility

Visibility is the abstraction of file permissions across multiple platforms. Visibility can be either public or private.

use League\Flysystem\AdapterInterface;

Yii::$app->fs->write('filename.ext', 'contents', [
    'visibility' => AdapterInterface::VISIBILITY_PRIVATE
]);

You can also change and check visibility of existing files

use League\Flysystem\AdapterInterface;

if (Yii::$app->fs->getVisibility('filename.ext') === AdapterInterface::VISIBILITY_PRIVATE) {
    Yii::$app->fs->setVisibility('filename.ext', AdapterInterface::VISIBILITY_PUBLIC);
}

Listing contents

To list contents

$contents = Yii::$app->fs->listContents();

foreach ($contents as $object) {
    echo $object['basename']
        . ' is located at' . $object['path']
        . ' and is a ' . $object['type'];
}

By default Flysystem lists the top directory non-recursively. You can supply a directory name and recursive boolean to get more precise results

$contents = Yii::$app->fs->listContents('path/to/directory', true);

Listing paths

To list paths

$paths = Yii::$app->fs->listPaths();

foreach ($paths as $path) {
    echo $path;
}

Listing with ensured presence of specific metadata

To list with ensured presence of specific metadata

$listing = Yii::$app->fs->listWith(
    ['mimetype', 'size', 'timestamp'],
    'optional/path/to/directory',
    true
);

foreach ($listing as $object) {
    echo $object['path'] . ' has mimetype: ' . $object['mimetype'];
}

Getting file info with explicit metadata

To get file info with explicit metadata

$info = Yii::$app->fs->getWithMetadata('path/to/filename.ext', ['timestamp', 'mimetype']);
echo $info['mimetype'];
echo $info['timestamp'];

Donating

Support this project and others by creocoder via gratipay.

Support via Gratipay

Comments
  • Tag a new release

    Tag a new release

    Would be really helpful, since we need to include dev-master manually in many projects.

    see also https://github.com/creocoder/yii2-flysystem/issues/12#issuecomment-278294362

    Beta or RC would be sufficient.

    opened by schmunk42 4
  • Add support for custom credentials provider

    Add support for custom credentials provider

    Close #35

    Credentials for s3 are provided by ec2 instance (https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_configuration.html#credentials).

    With this pr its possible to pass $credentials and skip key and secret validation. To use the default s3 behaviour you could use something like this

    use Aws\Credentials\CredentialProvider;
    
    return [
        'class' => 'creocoder\flysystem\AwsS3Filesystem',
        'credentials' => CredentialProvider::defaultProvider(),
    ];
    

    Wrap defaultProvider in memoize for best performance

    use Aws\Credentials\CredentialProvider;
    
    return [
        'class' => 'creocoder\flysystem\AwsS3Filesystem',
        'credentials' => CredentialProvider::memoize(
            CredentialProvider::defaultProvider()
        ),
    ];
    

    @petrabarus @and186

    opened by kesselb 3
  • SftpFilesystem  bug

    SftpFilesystem bug

    71 line if ($this->password === null || $this->privateKey === null) { to: if ($this->password === null && $this->privateKey === null) {

    opened by zhangxingcun 3
  • add enableTimestampsOnUnixListings option to FtpFilesystem

    add enableTimestampsOnUnixListings option to FtpFilesystem

    This PR adds the option enableTimestampsOnUnixListings from the class \League\Flysystem\Adapter\Ftp to the FtpFilesystem, which enables getting file timestamps directly from the ftp list cmd without having to call getTimestamp() for each file separately.

    see: https://github.com/thephpleague/flysystem/blob/v1.0/src/Adapter/AbstractFtpAdapter.php#L451

    opened by handcode 2
  • Next release anytime soon?

    Next release anytime soon?

    Hey, next release coming anytime soon? The endpoint for S3 V3 (also allows for DO spaces) change in master would be quite handy to have in a release :)

    opened by ptheofan 2
  • feature - get real FileSystem instance

    feature - get real FileSystem instance

    I think that it is better to depend upon originally file system interface instead of component creocoder\flysystem\Filesystem. Because this class is Yii2 specific component.

    opened by t-kanstantsin 2
  • Bump guzzlehttp/guzzle from 6.5.5 to 6.5.7

    Bump guzzlehttp/guzzle from 6.5.5 to 6.5.7

    Bumps guzzlehttp/guzzle from 6.5.5 to 6.5.7.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 6.5.7

    See change log for changes.

    Release 6.5.6

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    6.5.7 - 2022-06-09

    • Fix failure to strip Authorization header on HTTP downgrade
    • Fix failure to strip the Cookie header on change in host or HTTP downgrade

    6.5.6 - 2022-05-25

    • Fix cross-domain cookie leakage
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump guzzlehttp/guzzle from 6.5.5 to 6.5.6

    Bump guzzlehttp/guzzle from 6.5.5 to 6.5.6

    Bumps guzzlehttp/guzzle from 6.5.5 to 6.5.6.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 6.5.6

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    6.5.6 - 2022-05-25

    • Fix cross-domain cookie leakage
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • DropboxFilesystem prepareAdapter is wrong

    DropboxFilesystem prepareAdapter is wrong

    I think https://github.com/creocoder/yii2-flysystem/blob/1fdef0883316f891ecb512011cac462213156e38/src/DropboxFilesystem.php#L56

    line is wrong, since Spatie\Dropbox\Client second parameter should be Guzzle client not prefix

    It should probably be

            return new DropboxAdapter(
                new Client($this->token),
                $this->prefix
            );
    
    opened by mikk150 1
  • Updated dropbox adapter library to use dropbox v2 api

    Updated dropbox adapter library to use dropbox v2 api

    Updated dropbox adapter library to use dropbox v2 api, since the league/flysystem-dropbox library is still using dropbox api v1 and it is also abondoned, I replaced it with spatie/flysystem-dropbox.

    opened by huiyang 1
  • Asset manager S3 publish interface

    Asset manager S3 publish interface

    Struggling to have my assets published to S3. Asset manager relies on direct filesystem operations.

    Solution Thought it would be covenient to have AssetManager which is capable to use flysystem as an abstraction to filesystem. Not sure if this feature will break S.O.L.I.D. but I don't see any reasonable places to make this happen.

    opened by comradefuzz 1
  • Listing contents cannot show the top directory non-recursively

    Listing contents cannot show the top directory non-recursively

    With this package on composer.json:

     "creocoder/yii2-flysystem": "^1.1",                     [1.1.0]
     "league/flysystem-aws-s3-v3": "~1.0",              [1.0.30]
    

    Then, In Yii2 config:

    'components' => [
            'aws' => [
                'class' => 'creocoder\flysystem\AwsS3Filesystem',
                'key' => getenv('SPACES_DO_KEY'),
                'secret' => getenv('SPACES_DO_SECRET'),
                'bucket' => 'my-bucket-in-digitalocean',
                'region' => 'sgp1',
                'version' => 'latest',
                'endpoint' => 'https://sgp1.digitaloceanspaces.com',
            ],
    ]
    

    Works, If we doing this:

    $contents = Yii::$app->aws->listContents("/");
    die(Html::tag('pre', VarDumper::dumpAsString($contents)));
    
    Result:
    [
        0 => [
            'path' => 'delivery_order'
            'dirname' => ''
            'basename' => 'delivery_order'
            'filename' => 'delivery_order'
            'type' => 'dir'
        ]
        1 => [
            'path' => 'goods'
            'dirname' => ''
            'basename' => 'goods'
            'filename' => 'goods'
            'type' => 'dir'
        ]
    ]
    

    But not works for:

    $contents = Yii::$app->aws->listContents("/delivery_order");
    die(Html::tag('pre', VarDumper::dumpAsString($contents)));
    
    Result:
    [ ] // an empty array
    

    Please advice.

    opened by ahmadfadlydziljalal 1
  • Bump guzzlehttp/guzzle from 6.5.5 to 6.5.8

    Bump guzzlehttp/guzzle from 6.5.5 to 6.5.8

    Bumps guzzlehttp/guzzle from 6.5.5 to 6.5.8.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 6.5.8

    See change log for changes.

    Release 6.5.7

    See change log for changes.

    Release 6.5.6

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    6.5.8 - 2022-06-20

    • Fix change in port should be considered a change in origin
    • Fix CURLOPT_HTTPAUTH option not cleared on change of origin

    6.5.7 - 2022-06-09

    • Fix failure to strip Authorization header on HTTP downgrade
    • Fix failure to strip the Cookie header on change in host or HTTP downgrade

    6.5.6 - 2022-05-25

    • Fix cross-domain cookie leakage
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump guzzlehttp/psr7 from 1.8.3 to 1.8.5

    Bump guzzlehttp/psr7 from 1.8.3 to 1.8.5

    Bumps guzzlehttp/psr7 from 1.8.3 to 1.8.5.

    Release notes

    Sourced from guzzlehttp/psr7's releases.

    1.8.5

    See change log for changes.

    1.8.4

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/psr7's changelog.

    1.8.5 - 2022-03-20

    Fixed

    • Correct header value validation

    1.8.4 - 2022-03-20

    Fixed

    • Validate header values properly
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Allow Google App Engine authentication

    Allow Google App Engine authentication

    This is similar with PR #40

    Documentation of https://github.com/Superbalist/flysystem-google-cloud-storage says:

    /**
     * The credentials will be auto-loaded by the Google Cloud Client.
     *
     * 1. The client will first look at the GOOGLE_APPLICATION_CREDENTIALS env var.
     *    You can use ```putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json');``` to set the location of your credentials file.
     *
     * 2. The client will look for the credentials file at the following paths:
     * - windows: %APPDATA%/gcloud/application_default_credentials.json
     * - others: $HOME/.config/gcloud/application_default_credentials.json
     *
     * If running in Google App Engine, the built-in service account associated with the application will be used.
     * If running in Google Compute Engine, the built-in service account associated with the virtual machine instance will be used.
     */
    

    but in the code keyFilePath is required.

    I will prepare a PR for this if nobody beats me to it.

    opened by razvanphp 1
  • change WindowsAzure to MicrosoftAzure

    change WindowsAzure to MicrosoftAzure

    Please update AzureFilesystem: change WindowsAzure\Common\ServicesBuilder to MicrosoftAzure\Storage\Common\ServicesBuilder and delete base64_encode for accountName, accountKey

    opened by X-Zibit 0
Releases(1.1.0)
Owner
Alexander Kochetov
Alexander Kochetov
A easy way to install your basic yii projetc, we have encrypt database password in phpfile, my class with alot funtions to help you encrypt and decrypt and our swoole server install just run ./yii swoole/start and be happy!

Yii 2 Basic Project Template with swoole and Modules Yii 2 Basic Project Template is a skeleton Yii 2 application best for rapidly creating small proj

null 3 Apr 11, 2022
Extension for creating and sending emails for the Yii PHP framework.

yii-emailer Extension for creating and sending emails for the Yii PHP framework. Usage Migrate the email_message database table by this command: yiic

Digia 12 Mar 30, 2022
Yii 2 Bootstrap 5 Extension

Twitter Bootstrap 5 Extension for Yii 2 This is the Twitter Bootstrap extension for Yii framework 2.0. It encapsulates Bootstrap 5 components and plug

Yii Software 48 Dec 14, 2022
Yii2-symfonymailer - Yii 2 Symfony mailer extension.

Yii Mailer Library - Symfony Mailer Extension This extension provides a Symfony Mailer mail solution for Yii framework 2.0. For license information ch

Yii Software 28 Dec 22, 2022
Yii 2: The Fast, Secure and Professional PHP Framework

Yii 2 is a modern framework designed to be a solid foundation for your PHP application. It is fast, secure and efficient and works right out of the bo

Yii Software 14k Dec 31, 2022
🎲 This project provides an integration for the Doctrine ORM and the Hyperf framework

Hyperf ?? Doctrine This project provides an integration for the Doctrine ORM and the Hyperf framework. Install composer require leocavalcante/hyperf-d

Leo Cavalcante 49 Dec 3, 2022
Yii-specific middleware

Yii Middleware The package ... Requirements PHP 8.0 or higher. Installation The package could be installed with composer: composer require yiisoft/yii

Yii Software 9 Nov 4, 2022
Yii 2 widget for the Froala WYSIWYG HTML Editor.

Yii Framework Froala WYSIWYG HTML Editor Yii 2 widget for Froala Wysiwyg editor. Installation The preferred way to install this extension is through c

Froala 99 Sep 21, 2022
Geography module for Yii 2

Geography module for Yii 2

Sergey Fedorov 13 Oct 20, 2018
Code generation with logic-less templates for Yii

Caviar Code generation with logic-less templates for Yii. Caviar vs Gii You might be wondering why you should use Caviar instead of Gii, so let us tak

Christoffer Niska 10 Dec 19, 2015
Extends Yii Menu widget

Extends Yii Menu widget. This widget offers a scrollspy and affixed enhanced navigation (upto 2-levels) to highlight sections and secondary sections in each page.

Kartik Visweswaran 15 Mar 12, 2022
DepDrop widget is a Yii 2 wrapper for the dependent-dropdown jQuery plugin by Krajee.

yii2-widget-depdrop The DepDrop widget is a Yii 2 wrapper for the dependent-dropdown jQuery plugin by Krajee. This plugin allows multi level dependent

Kartik Visweswaran 82 Nov 27, 2022
An enhanced Yii 2 widget encapsulating the HTML 5 range input (sub repo split from yii2-widgets)

yii2-widget-rangeinput The RangeInput widget is a customized range slider control widget based on HTML5 range input. The widget enhances the default H

Kartik Visweswaran 19 Mar 12, 2022
Password strategies for Yii

Password strategies are specifications for how passwords should be encoded and verified and how complicated user supplied passwords should be.

Charles Pick 76 Apr 22, 2022
Simple, fast and secure PHP Framework with easy integration.

simple-php-framework Simple, fast and secure PHP Framework with easy integration.

winact 2 Nov 23, 2021
Plates Template Integration for Slim micro framework 3

Plates Template Integration for Slim micro framework 3 Render your Slim 3 application views using Plates template engine. Install Via Composer $ compo

Projek XYZ 26 Feb 5, 2022
Integration testing helpers for the Slim Framework

Slim Test Helpers Integration testing helpers for the Slim Framework 3 For a full example, please see the companion repo at there4/slim-unit-testing-e

There4 60 Oct 26, 2022
High performance, full-stack PHP framework delivered as a C extension.

Phalcon Framework Phalcon is an open source web framework delivered as a C extension for the PHP language providing high performance and lower resourc

The Phalcon PHP Framework 10.7k Jan 8, 2023
Fast php framework written in c, built in php extension

Yaf - Yet Another Framework PHP framework written in c and built as a PHP extension. Requirement PHP 7.0+ (master branch)) PHP 5.2+ (php5 branch) Inst

Xinchen Hui 4.5k Dec 28, 2022