Я работаю над проектом SilverStripe, в моем проекте мне нужно изменить поведение класса, являющегося частью инфраструктуры SilverStripe. Класс, который мне нужно изменить, это SilverStripe \ Assets \ Flysystem \ FlysystemAssetStore. Например, я сейчас пытаюсь изменить существующий метод класса. Я пытался использовать два варианта Injector и Extension. Оба не работали.
Первый вариант, который я попробовал, - это использование инжектора. Это то, что я сделал.
Сначала я создал класс с именем CustomFlysystemAssetStore.
Затем я добавил следующий код в mysite.yml
SilverStripe\Assets\Flysystem\FlysystemAssetStore:
class: CustomFlysystemAssetStore
Я объявил, что вызываемая функция publi c существует в классе CustomFlysystemAssetStore для переопределения существующего поведения. Но это не сработало. Новый метод в новом классе не был выполнен вообще.
Второй вариант, который я попробовал, - это использование Extension. Это то, что я сделал.
Сначала я создал класс CustomFlysystemAssetStore, который расширяет класс DataExtension.
Затем я добавил следующий фрагмент кода в mysite.yml.
SilverStripe\Assets\Flysystem\FlysystemAssetStore:
extensions:
- CustomFlysystemAssetStore
Затем я объявил метод publi c в новом вызываемом классе существует, чтобы увидеть, вызывается ли новый метод.
К сожалению, второй подход тоже не сработал. Как я могу переопределить методы класса SilverStripe \ Assets \ Flysystem \ FlysystemAssetStore, который является частью фреймворка?
Это мой файл assets.yml
---
Name: silverstripes3-flysystem
Only:
envvarset: AWS_BUCKET_NAME
After:
- '#assetsflysystem'
---
SilverStripe\Core\Injector\Injector:
Aws\S3\S3Client:
constructor:
configuration:
region: '`AWS_REGION`'
version: latest
League\Flysystem\Adapter\Local:
class: League\Flysystem\Adapter\Local
constructor:
root: '`TEMP_PATH`'
SilverStripe\S3\Adapter\PublicAdapter:
constructor:
s3Client: '%$Aws\S3\S3Client'
bucket: '`AWS_BUCKET_NAME`'
prefix: '`AWS_PUBLIC_BUCKET_PREFIX`'
League\Flysystem\Cached\Storage\Memory.public:
class: League\Flysystem\Cached\Storage\Memory
League\Flysystem\Cached\Storage\Adapter.public:
class: League\Flysystem\Cached\Storage\Adapter
constructor:
adapter: '%$League\Flysystem\Adapter\Local'
file: 's3metadata/public'
expire: 259200
SilverStripe\Assets\Flysystem\PublicAdapter:
class: SilverStripe\S3\Adapter\PublicCachedAdapter
constructor:
adapter: '%$SilverStripe\S3\Adapter\PublicAdapter'
cache: '%$League\Flysystem\Cached\Storage\Adapter.public'
SilverStripe\S3\Adapter\ProtectedAdapter:
constructor:
s3Client: '%$Aws\S3\S3Client'
bucket: '`AWS_BUCKET_NAME`'
prefix: '`AWS_PROTECTED_BUCKET_PREFIX`'
League\Flysystem\Cached\Storage\Adapter.protected:
class: League\Flysystem\Cached\Storage\Adapter
constructor:
adapter: '%$League\Flysystem\Adapter\Local'
file: 's3metadata/protected'
expire: 259200
SilverStripe\Assets\Flysystem\ProtectedAdapter:
class: SilverStripe\S3\Adapter\ProtectedCachedAdapter
constructor:
adapter: '%$SilverStripe\S3\Adapter\ProtectedAdapter'
cache: '%$League\Flysystem\Cached\Storage\Adapter.protected'
#---
Name: silverstripes3-assetscore
Only:
envvarset: AWS_BUCKET_NAME
After:
- '#assetscore'
---
SilverStripe\Core\Injector\Injector:
SilverStripe\Assets\Storage\AssetStore:
class: CustomFlysystemAssetStore