I'm having a "First arg must be a non empty string!" exception when trying to delete a post and its associated image on cascade.
I'm using cakephp v3.2.1, with cakephp-file-storage v1.1.4 and cakephp-imagine-plugin v2.1.1
// config/file_storage.php
$listener = new BaseListener([
'imageProcessing' => true, // Required if you want image processing!
'pathBuilderOptions' => [
'pathPrefix' => '/files',
'preserveFilename' => true
]
]);
// Attach the BaseListener to the global EventManager
EventManager::instance()->on($listener);
Configure::write('FileStorage', [
// Configure image versions on a per model base
// Same as docs example
]);
// This is very important! The hashes are needed to calculate the image versions!
StorageUtils::generateHashes();
// Configure Local adapter instance through the StorageManager
StorageManager::config('Local', [
'adapterOptions' => [ROOT . DS . 'file_storage', true],
'adapterClass' => '\Gaufrette\Adapter\Local',
'class' => '\Gaufrette\Filesystem'
]);
// Set model field
\Cake\Event\EventManager::instance()->on('Model.beforeSave', function (\Cake\Event\Event $event, \Cake\ORM\Entity $entity, ArrayObject $options) {
$event->subject()->patchEntity($entity, ['model' => $entity->source()]);
});
class PostsTable extends Table
{
public function initialize(array $config)
{
parent::initialize($config);
$this->hasOne('MainImages', [
'foreignKey' => 'foreign_key',
'className' => 'PostImages',
'conditions' => ['model' => 'MainImages'],
'dependent' => true,
'cascadeCallbacks' => true
]);
}
}
use Burzum\FileStorage\Model\Table\ImageStorageTable;
class PostImagesTable extends ImageStorageTable
{
// empty
}
The controllers and templates are baked, and I'm using the posts/delete action to delete posts (and images on cascade).
2016-02-21 03:16:43 Error: [Burzum\FileStorage\Storage\StorageException] First arg must be a non empty string!
Request URL: /posts/delete/32
Referer URL: http://testupload.v1/posts
Stack Trace:
#0 /home/choma/www/testupload_v1/vendor/burzum/file-storage/src/Storage/Listener/BaseListener.php(81): Burzum\FileStorage\Storage\Listener\AbstractListener->_deleteFile(Object(Cake\Event\Event))
#1 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Burzum\FileStorage\Storage\Listener\BaseListener->afterDelete(Object(Cake\Event\Event), Object(Cake\ORM\Entity), Object(Gaufrette\Filesystem), Object(App\Model\Table\PostImagesTable))
#2 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Event/EventManager.php(355): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#3 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#4 /home/choma/www/testupload_v1/vendor/burzum/file-storage/src/Model/Table/FileStorageTable.php(243): Cake\ORM\Table->dispatchEvent('ImageStorage.af...', Array, NULL)
#5 /home/choma/www/testupload_v1/vendor/burzum/file-storage/src/Model/Table/ImageStorageTable.php(129): Burzum\FileStorage\Model\Table\FileStorageTable->dispatchEvent('ImageStorage.af...', Array)
#6 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Burzum\FileStorage\Model\Table\ImageStorageTable->afterDelete(Object(Cake\Event\Event), Object(Cake\ORM\Entity), Object(ArrayObject), Object(App\Model\Table\PostImagesTable))
#7 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Event/EventManager.php(355): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#8 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#9 /home/choma/www/testupload_v1/vendor/burzum/file-storage/src/Model/Table/FileStorageTable.php(243): Cake\ORM\Table->dispatchEvent('Model.afterDele...', Array, NULL)
#10 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Table.php(1725): Burzum\FileStorage\Model\Table\FileStorageTable->dispatchEvent('Model.afterDele...', Array)
#11 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Table.php(1647): Cake\ORM\Table->_processDelete(Object(Cake\ORM\Entity), Object(ArrayObject))
#12 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Database/Connection.php(557): Cake\ORM\Table->Cake\ORM\{closure}(Object(Cake\Database\Connection))
#13 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Table.php(1652): Cake\Database\Connection->transactional(Object(Closure))
#14 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Association/DependentDeleteTrait.php(48): Cake\ORM\Table->delete(Object(Cake\ORM\Entity), Array)
#15 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/AssociationCollection.php(270): Cake\ORM\Association\HasOne->cascadeDelete(Object(App\Model\Entity\Post), Array)
#16 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Table.php(1709): Cake\ORM\AssociationCollection->cascadeDelete(Object(App\Model\Entity\Post), Array)
#17 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Table.php(1647): Cake\ORM\Table->_processDelete(Object(App\Model\Entity\Post), Object(ArrayObject))
#18 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Database/Connection.php(557): Cake\ORM\Table->Cake\ORM\{closure}(Object(Cake\Database\Connection))
#19 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/ORM/Table.php(1652): Cake\Database\Connection->transactional(Object(Closure))
#20 /home/choma/www/testupload_v1/src/Controller/PostsController.php(102): Cake\ORM\Table->delete(Object(App\Model\Entity\Post))
#21 [internal function]: App\Controller\PostsController->delete('32')
#22 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Controller/Controller.php(430): call_user_func_array(Array, Array)
#23 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(114): Cake\Controller\Controller->invokeAction()
#24 /home/choma/www/testupload_v1/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\PostsController))
#25 /home/choma/www/testupload_v1/webroot/index.php(37): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#26 {main}