PHP code example of mezcalito / sylius-file-upload-plugin
1. Go to this page and download the library: Download mezcalito/sylius-file-upload-plugin library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
mezcalito / sylius-file-upload-plugin example snippets
# src/entity/book.php
namespace App\Entity;
use Doctrine\Common\Collections\Collection;
use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Mapping as ORM;
use Mezcalito\SyliusFileUploadPlugin\Model\FilesAwareInterface;
use Mezcalito\SyliusFileUploadPlugin\Model\FilesAwareTrait;
use Sylius\Component\Resource\Model\ResourceInterface;
use Sylius\Resource\Metadata\AsResource;
use Sylius\Resource\Metadata\BulkDelete;
use Sylius\Resource\Metadata\Create;
use Sylius\Resource\Metadata\Delete;
use Sylius\Resource\Metadata\Index;
use Sylius\Resource\Metadata\Show;
use Sylius\Resource\Metadata\Update;
#[ORM\Entity]
#[ORM\Table(name: 'app_book')]
class Book implements ResourceInterface, FilesAwareInterface
{
use FilesAwareTrait {
FilesAwareTrait::__construct as private initializeFilesCollection;
}
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: Types::INTEGER)]
protected ?int $id = null;
#[ORM\OneToMany( mappedBy: 'owner', targetEntity: BookFile::class, cascade: ['all'], orphanRemoval: true)]
#[ORM\JoinTable(name: 'app_book_file')]
protected Collection $files;
public function getId(): ?int
{
return $this->id;
}
public function __construct() {
$this->initializeFilesCollection();
}
}
declare(strict_types=1);
namespace App\Form\Type;
use Sylius\Bundle\AdminBundle\Form\Type\AddButtonType;
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\UX\LiveComponent\Form\Type\LiveCollectionType;
class BookType extends AbstractResourceType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder->add('files', LiveCollectionType::class, [
'entry_type' => BookFileType::class,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
'button_add_type' => AddButtonType::class,
'button_add_options' => [
'label' => 'sylius.ui.add_rule',
],
'button_delete_options' => [
'label' => false,
],
]);
}
public function getBlockPrefix(): string
{
return 'app_admin_book';
}
}
public function __construct()
{
parent::__construct();
$this->files = new ArrayCollection();
$this->addFile(new BookFile());
}
declare(strict_types=1);
namespace App\Form\Type;
use Mezcalito\SyliusFileUploadPlugin\Form\Type\FileType;
class BookFileType extends FileType
{
/**
* {@inheritdoc}
*/
public function getBlockPrefix(): string
{
return 'app_admin_book_file';
}
}
# src/Grid/BookGrid.php
namespace App\Grid;
use Sylius\Bundle\GridBundle\Builder\Action\CreateAction;
use Sylius\Bundle\GridBundle\Builder\Action\DeleteAction;
use Sylius\Bundle\GridBundle\Builder\Action\UpdateAction;
use Sylius\Bundle\GridBundle\Builder\ActionGroup\BulkActionGroup;
use Sylius\Bundle\GridBundle\Builder\ActionGroup\ItemActionGroup;
use Sylius\Bundle\GridBundle\Builder\ActionGroup\MainActionGroup;
use Sylius\Bundle\GridBundle\Builder\Field\TwigField;
use Sylius\Bundle\GridBundle\Builder\GridBuilderInterface;
use Sylius\Bundle\GridBundle\Grid\AbstractGrid;
use Sylius\Bundle\GridBundle\Grid\ResourceAwareGridInterface;
use App\Entity\Book;
final class BookGrid extends AbstractGrid implements ResourceAwareGridInterface
{
public static function getName(): string
{
return 'app_book';
}
public function buildGrid(GridBuilderInterface $gridBuilder): void
{
$gridBuilder
// see https://github.com/Sylius/SyliusGridBundle/blob/master/docs/field_types.md
->addActionGroup(
MainActionGroup::create(
CreateAction::create(),
)
)
->addActionGroup(
ItemActionGroup::create(
// ShowAction::create(),
UpdateAction::create(),
DeleteAction::create()
)
)
->addActionGroup(
BulkActionGroup::create(
DeleteAction::create()
)
)
->addField(
TwigField::create(name: 'files', template: 'book/grid/field/files.html.twig')->setPath('files'),
)
;
}
public function getResourceClass(): string
{
return Book::class;
}
}
# src/Twig/Components/BookFormComponent.php
namespace App\Twig\Components;
use Sylius\TwigHooks\LiveComponent\HookableLiveComponentTrait;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormInterface;
use Symfony\UX\LiveComponent\Attribute\AsLiveComponent;
use Symfony\UX\LiveComponent\Attribute\LiveProp;
use Symfony\UX\LiveComponent\DefaultActionTrait;
use Symfony\UX\LiveComponent\LiveCollectionTrait;
use App\Entity\Book;
use App\Form\Type\BookType;
#[AsLiveComponent(template: '@SyliusAdmin/shared/crud/common/content/form.html.twig')]
class BookFormComponent extends AbstractController
{
use LiveCollectionTrait;
use DefaultActionTrait;
use HookableLiveComponentTrait; // for Sylius Twig Hooks
#[LiveProp]
public Book $resource;
protected function instantiateForm(): FormInterface
{
return $this->createForm(BookType::class, $this->resource);
}
}
# src/Menu/AdminMenuListener.php
declare(strict_types=1);
namespace App\Menu;
use Sylius\Bundle\UiBundle\Menu\Event\MenuBuilderEvent;
final class AdminMenuListener
{
public function addAdminMenuItems(MenuBuilderEvent $event): void
{
$menu = $event->getMenu();
$contentAdmin = $menu
->addChild('new')
->setLabel('app.ui.nav.menu.content_admin');
$contentAdmin->addChild('admin_book', ['route' => 'app_admin_book_index'])
->setLabel('book')
->setLabelAttribute('icon', 'window minimize');
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.