私は、説明した方法でファイルの名前を変更する小さなコネクタプラグインを用意しました。残念なことに、私は小さなハックなしにこの結果を達成できませんでした。クローズをバインドしてプライベートオブジェクトプロパティにアクセスしました。
CKFinder 3 PHP Connectorプラグインの詳細については、plugins docsをご覧ください。
はここでプラグインだ、私はあなたがそれが役に立つことを願っています:
<?php
namespace CKSource\CKFinder\Plugin\CustomAutorename;
use CKSource\CKFinder\CKFinder;
use CKSource\CKFinder\Event\BeforeCommandEvent;
use CKSource\CKFinder\Event\CKFinderEvent;
use CKSource\CKFinder\Filesystem\Folder\WorkingFolder;
use CKSource\CKFinder\Plugin\PluginInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\File\UploadedFile;
class CustomAutorename implements PluginInterface, EventSubscriberInterface
{
protected $app;
public function setContainer(CKFinder $app)
{
$this->app = $app;
}
public function getDefaultConfig()
{
return [];
}
public function onBeforeUpload(BeforeCommandEvent $event)
{
$request = $event->getRequest();
/** @var UploadedFile $uploadedFile */
$uploadedFile = $request->files->get('upload');
/** @var WorkingFolder $workingFolder */
$workingFolder = $this->app['working_folder'];
if ($uploadedFile) {
$uploadedFileName = $uploadedFile->getClientOriginalName();
if (!$workingFolder->containsFile($uploadedFileName)) {
// File with this name doesn't exist, nothing to do here.
return;
}
$basename = pathinfo($uploadedFileName, PATHINFO_FILENAME);
$extension = pathinfo($uploadedFileName, PATHINFO_EXTENSION);
$i = 0;
// Increment the counter until there's no file named like this in current folder.
while (true) {
$i++;
$uploadedFileName = "{$basename}-{$i}.{$extension}";
if (!$workingFolder->containsFile($uploadedFileName)) {
break;
}
}
// And here's the hack to make a private property accessible to set a new file name.
$setOriginalName = function (UploadedFile $file, $newFileName) {
$file->originalName = $newFileName;
};
$setOriginalName = \Closure::bind($setOriginalName, null, $uploadedFile);
$setOriginalName($uploadedFile, $uploadedFileName);
}
}
public static function getSubscribedEvents()
{
return [CKFinderEvent::BEFORE_COMMAND_FILE_UPLOAD => 'onBeforeUpload'];
}
}
はどうもありがとうございました、私が探していたまさにでしたこと。 –