Правила проверки и Правила применения в Cakephp 4

#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; }  

Имеет ли смысл определять эти правила применения ?

Или было бы полезно использовать эти правила в качестве правил проверки ?