onBeforeSaveAssetでファイルの名前を変更できない

プラグインで次のコードスニペットを使用して、実際にCraftに保存される前にファイルの名前を変更しようとしています。

craft()->on('assets.onBeforeSaveAsset', function(Event $event) {
        if($event->params['isNewAsset'])
        {
            $asset = $event->params['asset'];
            $filename = 'SOME_RANDOM_STRING'.$asset->getExtension();

            $asset->setAttribute('filename', $filename);

            craft()->assets->storeFile($asset);

    });

この掲示板のいくつかの質問でスニペットを見つけましたが、正しいと思われる間に、上記のスニペットが使用されるとすぐにファイルはもうアップロードされません。クラフト自体の中では、アップロードバーは永遠に何も起こりません。フロントエンドのajaxフォームを使ってファイルをアップロードすると、ajaxリクエストは失敗します。しかし、ログファイルには何のエラーも記録されていないので、問題の原因を突き止めることはできません。上記のスニペットをもう一度削除すると、アップロードは正常に機能します。

何か案は?

編集:
Bradが提供したコードを編集した後も、それでも機能しませんが、少なくともログファイルには実際のエラーが表示されます。

2017/10/09 06:11:24 [error] [php] fopen(https://s3-eu-west-1.amazonaws.com/***/challenges/NZpnyFj5.jpg): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
 (/home/praktikant/www/x-challenge.info/craft/plugins/businesslogic/BusinessLogicPlugin.php:172)
Stack trace:
#0 /home/praktikant/www/x-challenge.info/craft/plugins/businesslogic/BusinessLogicPlugin.php(88): CraftBusinessLogicPlugin->generateCopyright()
#1 unknown(0): CraftBusinessLogicPlugin->Craft{closure}()
#2 /home/praktikant/www/x-challenge.info/craft/app/framework/base/CComponent.php(567): call_user_func()
#3 /home/praktikant/www/x-challenge.info/craft/app/services/AssetsService.php(1174): CraftAssetsService->raiseEvent()
#4 /home/praktikant/www/x-challenge.info/craft/app/services/AssetsService.php(224): CraftAssetsService->onSaveAsset()
#5 /home/praktikant/www/x-challenge.info/craft/app/assetsourcetypes/BaseAssetSourceType.php(275): CraftAssetsService->storeFile()
#6 /home/praktikant/www/x-challenge.info/craft/app/services/AssetsService.php(776): CraftS3AssetSourceType->insertFileByPath()
#7 /home/praktikant/www/x-challenge.info/craft/app/fieldtypes/AssetsFieldType.php(273): CraftAssetsService->insertFileByLocalPath()
#8 /home/praktikant/www/x-challenge.info/craft/app/models/BaseElementModel.php(912): CraftAssetsFieldType->prepValueFromPost()
#9 /home/praktikant/www/x-challenge.info/craft/app/controllers/EntriesController.php(931): CraftEntryModel->setContentFromPost()
#10 /home/praktikant/www/x-challenge.info/craft/app/controllers/EntriesController.php(446): CraftEntriesController->_populateEntryModel()
#11 /home/praktikant/www/x-challenge.info/craft/app/framework/web/actions/CInlineAction.php(49): CraftEntriesController->actionSaveEntry()
#12 /home/praktikant/www/x-challenge.info/craft/app/framework/web/CController.php(308): CInlineAction->runWithParams()
#13 /home/praktikant/www/x-challenge.info/craft/app/framework/web/CController.php(286): CraftEntriesController->runAction()
#14 /home/praktikant/www/x-challenge.info/craft/app/framework/web/CController.php(265): CraftEntriesController->runActionWithFilters()
#15 /home/praktikant/www/x-challenge.info/craft/app/framework/web/CWebApplication.php(282): CraftEntriesController->run()
#16 /home/praktikant/www/x-challenge.info/craft/app/etc/web/WebApp.php(817): CraftWebApp->runController()
#17 /home/praktikant/www/x-challenge.info/craft/app/etc/web/WebApp.php(287): CraftWebApp->_processActionRequest()
#18 /home/praktikant/www/x-challenge.info/craft/app/framework/base/CApplication.php(185): CraftWebApp->processRequest()
#19 /home/praktikant/www/x-challenge.info/craft/app/index.php(62): CraftWebApp->run()
#20 /home/praktikant/www/x-challenge.info/public/index.php(19): require_once()
REQUEST_URI=/hochladen

このエラーは、S3バケットに保存されたファイルを開くことができない
fopen()と関連しているようです。しかし、なぜ私は、
onBeforeSaveAsset
で名前を変更せずにアップロードされた場合、S3バケット上のファイルにアクセスすることができます。

ベストアンサー

ifステートメントの終了} がありません。それを追加するとうまくいくはずです:

craft()->on('assets.onBeforeSaveAsset', function(Event $event) {
    if ($event->params['isNewAsset'])
    {
        $asset = $event->params['asset'];
        $filename = StringHelper::randomString(8).'.'.$asset->getExtension();

        $asset->setAttribute('filename', $filename);
    }
});

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です