AttachFileBundle
, (*1)
ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π±Π°Π½Π΄Π» Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π½Π° ΡΠ°ΠΉΡΠ΅. ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ. ΠΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ·ΡΠΊΠΎΠ²ΡΡ
Π²Π΅ΡΡΠΈΠΉ., (*2)
Installation
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ItBlasterAttachFileBundle Π² composer.json
:, (*3)
{
"require": {
"it-blaster/attach-file-bundle": "dev-master"
},
}
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ·Π΅Ρ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°ΡΠ°ΡΡ Π±Π°Π½Π΄Π» ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:, (*4)
``` bash
$ php composer.phar update it-blaster/attach-file-bundle, (*5)
ΠΠΎΠΌΠΏΠΎΠ·Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π±Π°Π½Π΄Π» Π² ΠΏΠ°ΠΏΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° `vendor/it-blaster/attach-file-bundle`.
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π±Π°Π½Π΄Π» Π² ΡΠ΄ΡΠ΅ `AppKernel.php`:
``` php
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new ItBlaster\AttachFileBundle\ItBlasterAttachFileBundle(),
);
}
Π app/config/config.yml
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΡΡ Π΄ΠΎ ΠΊΠ»Π°ΡΡΠ° Π±ΠΈΡ
Π΅ΠΉΠ²ΠΎΡΠ° it_blaster_file ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° attach_file:, (*6)
``` bash
propel:
...
behaviors:
...
it_blaster_file: ItBlaster\AttachFileBundle\Behavior\AttachFileBehavior, (*7)
twig:
form:
resources:
- 'ItBlasterAttachFileBundle:Form:attach_file_widget.html.twig', (*8)
assetic:
bundles:
- 'ItBlasterAttachFileBundle', (*9)
Π ΡΠ°ΠΉΠ» app/config/routing.yml Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠΎΡΡΠΈΠ½Π³-ΡΠ°ΠΉΠ» Π±Π°Π½Π΄Π»Π°:
``` bash
attach_file:
resource: '@ItBlasterAttachFileBundle/Resources/config/routing.yml'
Usage
Π ΡΠ°ΠΉΠ»Π΅ schema.yml
ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π±ΠΈΡ
Π΅ΠΉΠ²ΠΎΡ it_blaster_file
``` xml, (*10)
Π ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ <b>file_columns</b> Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅ <b>image</b>. ΠΡΠ»ΠΈ ΠΊ ΡΡΡΠ½ΠΎΡΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅ΠΊΡΠ΅ΠΏΠ»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ <b>file_columns</b> Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
``` xml
ΠΠΎΠ»Ρ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏ integer, (*11)
ΠΠ°Π»Π΅Π΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΎΡΠΌΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΠ»Π΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°:
``` php
$formMapper
->add('image_file', 'attach_file', array(
'label' => 'ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅',
'required' => false,
'constraints' => [
new Image([
'mimeTypes' => [
'image/gif',
'image/jpeg',
'image/pjpeg',
'image/png'
]
])
], (*12)
));
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΠ»Π΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ `image`, Π° `image_file`. ΠΡΠΎ ΠΏΠΎΠ»Π΅ image_file ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ get ΠΈ set ΡΠΎΠ·Π΄Π°Π» Π±ΠΈΡ
Π΅ΠΉΠ²ΠΎΡ <b>AttachFileBehavior</b>, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΡΠΌΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Use i18n
-------
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°ΠΉΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ propel-Π±ΠΈΡ
Π΅ΠΉΠ²ΠΎΡΠ° `i18n` ΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡΡ ΡΠ°ΠΉΠ», ΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ (<b>document</b>) ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ `i18n`, Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΡ ΠΏΠΎΠ»Ρ ΡΠ°ΠΉΠ»Π°, ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°ΠΌΠΈ (<b>document_i18n</b>) ΡΠΊΠ·Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ `file_columns`, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ ΡΠ°ΠΉΠ»Π°. ΠΡΠΈΠΌΠ΅Ρ:
``` xml
<table name="document_i18n">
<behavior name="it_blaster_file" >
<parameter name="file_columns" value="download" />
</behavior>
</table>
ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ attach_file Π² Π°Π΄ΠΌΠΈΠ½-ΡΠΎΡΠΌΠ΅:
xml
$formMapper
->add('DocumentI18ns', new TranslationCollectionType(), [
'label' => false,
'required' => false,
'type' => new TranslationType(),
'languages' => $this->getConfigurationPool()->getContainer()->getParameter('locales'),
'options' => [
'label' => false,
'data_class' => 'Artsofte\MainBundle\Model\DocumentI18n',
'columns' => [
'active' => [
'label' => "ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ",
'type' => 'checkbox',
],
'file_title' => [
'label' => "ΠΠΌΡ ΡΠ°ΠΉΠ»Π°",
'type' => 'text',
'required' => true,
],
'download_file' => array(
'type' => 'attach_file',
'label' => 'ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»',
'maxSize' => '20M',
'options' => [
'sonata_help' => 'ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΏΡ ΡΠ°ΠΉΠ»ΠΎΠ²: pdf, doc, docx, zip, jpg, gif, png',
'constraints' => [
new \Symfony\Component\Validator\Constraints\File([
'mimeTypes' => [
'application/pdf',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.oasis.opendocument.text',
'application/zip',
'image/gif',
'image/jpeg',
'image/pjpeg',
'image/png'
]
])
]
]
),
]
]
])
;
, (*13)
Credits
It-Blaster it-blaster@yandex.ru, (*14)