#php #cakephp-4.x
Вопрос:
Я создаю плагин FileManager
, в котором все загрузки хранятся в одной таблице. Этот плагин имеет AttachmentBehavior
, который присоединяет hasOne
hasMany
ассоциацию или.
Я хочу определить правила, ограничивающие размер папки для загрузки и количество файлов, прикрепленных к полю.
Согласно документу, я предполагаю, что это должны быть правила применения, но я не уверен на 100%.
Вот мой код :
// in AttachmentBehavior public function buildRules(Event $event, RulesChecker $rules): RulesChecker { $uploadFolderSize = TableRegistry::getTableLocator() -gt;get('FileManager.Fichiers') -gt;find() -gt;sumOf('size'); $uploadedSize = 0; foreach ($this-gt;_fields as $field =gt; $value) { // [...] foreach ($uploadedFiles as $upload) { $uploadedSize = $upload-gt;getSize(); } // Add application rule on create on $fileField $rules-gt;addCreate(function ($entity, $options) use ($uploadedFiles, $maxFiles) { if (empty($uploadedFiles) || $maxFiles === false) { return true; } if (count($uploadedFiles) gt; $maxFiles) { return 'The field is limited to ' . $maxFiles . __n(' file', ' files', $maxFiles); } return true; }, 'ruleCreate' . $alias, ['errorField' =gt; $fileField, 'message' =gt; 'Field limited to a number of files']); // Add application rule on update on $fileField $rules-gt;addUpdate(function ($entity, $options) use ($uploadedFiles, $maxFiles, $alias) { if (empty($uploadedFiles) || $maxFiles === false) { return true; } $alreadyLinkedCount = $this-gt;table()-gt;$alias -gt;find() -gt;where(["$alias.foreign_key" =gt; $entity-gt;id]) -gt;count(); if (count($uploadedFiles) $alreadyLinkedCount gt; $maxFiles) { return 'The field is limited to ' . $maxFiles . __n(' file', ' files', $maxFiles); } return true; }, 'ruleUpdate' . $alias, ['errorField' =gt; $fileField, 'message' =gt; 'Champ limité à un nb de fichiers']); } // Check upload folder size if (Configure::check('FileManager.limitUploadFolder')) { $limitUploadFolder = Configure::read('FileManager.limitUploadFolder'); if (is_string($limitUploadFolder)) { $limitUploadFolder = Text::parseFileSize($limitUploadFolder); } if ($uploadedSize $uploadFolderSize gt;= $limitUploadFolder) { foreach ($this-gt;_fields as $field =gt; $value) { $fileField = $this-gt;getFileField($field); $alias = $value['alias']; $uploadedFiles = $value['uploadedFiles']; $rules-gt;add(function ($entity, $options) use ($uploadedFiles) { if (empty($uploadedFiles)) { return true; } return false; }, 'limitUploadFolder' . $alias, ['errorField' =gt; $fileField, 'message' =gt; 'Not enough space in the upload folder']); } } } return $rules; }
Имеет ли смысл определять эти правила применения ?
Или было бы полезно использовать эти правила в качестве правил проверки ?