Skip to content

Commit

Permalink
Update Readme (#152)
Browse files Browse the repository at this point in the history
  • Loading branch information
Silas Joisten authored May 14, 2022
1 parent 9fccd9c commit 46fa094
Showing 1 changed file with 100 additions and 38 deletions.
138 changes: 100 additions & 38 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,82 +95,144 @@ sonata_multi_upload:
redirect_to: 'admin_sonata_media_media_list'
```

**HINT:** You can create a controller action in your `MediaAdminController` which is called like
`createGalleryFromMultiUploadAction`. The MultiUploadBundle passes automatically the id's from the uploaded medias

**HINT:** The MultiUploadBundle passes automatically the id's from the uploaded `Media` objects
to the redirection route for example: `/foo/bar?idx=%5B70%2C71%2C72%5D` so you can take them and create
a gallery from uploaded medias.

In the following i provide an example:
### Example: Uploading multiple images and create automatically a `Gallery`

#### Create controller

The controller takes your request and create in this example a `Gallery` with `GalleryItems` and redirects to the
edit view of `GalleryAdmin`

In your `MediaAdminController.php`:
```php
<?php
namespace App\Controller;
use App\Application\Sonata\MediaBundle\Admin\GalleryAdmin;
use SilasJoisten\Sonata\MultiUploadBundle\Controller\MultiUploadController;
use App\Entity\SonataMediaGallery;
use App\Entity\SonataMediaGalleryItem;
use Sonata\MediaBundle\Admin\GalleryAdmin;
use Sonata\MediaBundle\Entity\MediaManager;
use Sonata\MediaBundle\Entity\GalleryManager;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
final class MediaAdminController extends MultiUploadController
final class CreateGalleryAction
{
public function createGalleryAction(Request $request, MediaManager $mediaManager, GalleryManager $galleryManager, GalleryAdmin $galleryAdmin): RedirectResponse
private MediaManager $mediaManager;
private GalleryManager $galleryManager;
private GalleryAdmin $galleryAdmin;
public function __construct(
MediaManager $mediaManager,
GalleryManager $galleryManager,
GalleryAdmin $galleryAdmin
) {
$this->mediaManager = $mediaManager;
$this->galleryManager = $galleryManager;
$this->galleryAdmin = $galleryAdmin;
}
public function __invoke(Request $request): RedirectResponse
{
$idx = $request->query->get('idx');
$idx = json_decode($idx);
$gallery = $galleryManager->create();
/** @var SonataMediaGallery $gallery */
$gallery = $this->galleryManager->create();
$gallery->setName('Auto Created Gallery');
$gallery->setEnabled(false);
$gallery->setContext('default');
foreach ($idx as $id) {
$media = $mediaManager->find($id);
$galleryHasMedia = new GalleryHasMedia();
$media = $this->mediaManager->find($id);
$galleryHasMedia = new SonataMediaGalleryItem();
$galleryHasMedia->setGallery($gallery);
$galleryHasMedia->setMedia($media);
$gallery->addGalleryHasMedia($galleryHasMedia);
$gallery->addGalleryItem($galleryHasMedia);
}
$galleryManager->save($gallery);
return $this->redirect($galleryAdmin->generateObjectUrl('edit', $gallery));
$this->galleryManager->save($gallery);
return new RedirectResponse($this->galleryAdmin->generateObjectUrl('edit', $gallery));
}
}
```
Maybe you need to create an alias for `MediaManager` and `GalleryManager` like:
```yaml
# config/services.yaml
services:
Sonata\MediaBundle\Entity\MediaManager:
alias: sonata.media.manager.media
```

Sonata\MediaBundle\Entity\GalleryManager:
alias: sonata.media.manager.gallery
#### Register route

App\Application\Sonata\MediaBundle\Admin\GalleryAdmin:
alias: sonata.media.admin.gallery
If you already override the default `MediaAdmin` you can add the route in the admin class via
```php
protected function configureRoutes(RouteCollectionInterface $collection): void
{
$collection->add('create_gallery', 'multi-upload/create-gallery', [
'_controller' => CreateGalleryAction::class,
]);
}
```

otherwise you can create an `AdminExtension` like the following:
```php
<?php
declare(strict_types=1);
Register Route in `MediaAdmin.php`:
namespace App\Admin\Extension;
```php
protected function configureRoutes(RouteCollection $collection): void
use App\Controller\CreateGalleryAction;
use Sonata\AdminBundle\Admin\AbstractAdminExtension;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
final class MediaAddRouteExtension extends AbstractAdminExtension
{
$collection->add('create_gallery', 'create/gallery/uploaded/medias');
public function configureRoutes(AdminInterface $admin, RouteCollectionInterface $collection): void
{
$collection->add('create_gallery', 'multi-upload/create-gallery', [
'_controller' => CreateGalleryAction::class,
]);
}
}
```

And update the config accordingly:
and register this extension in your `config/services.yaml`

```yaml
# config/packages/sonata_multi_upload.yaml
services:
# ...
App\Admin\Extension\MediaAddRouteExtension:
tags:
- { name: sonata.admin.extension, target: sonata.media.admin.media }
```

Now configure the `redirect_to` in `config/packages/sonata_multi_upload.yaml`

```yaml
sonata_multi_upload:
redirect_to: 'admin_sonata_media_media_create_gallery'
redirect_to: 'admin_app_sonatamediamedia_create_gallery'
```
This is how you can create a Gallery by uploaded Medias.

Maybe you need to create an alias for `MediaManager` and `GalleryManager` like:
```yaml
# config/services.yaml
services:
Sonata\MediaBundle\Entity\MediaManager:
alias: sonata.media.manager.media
Sonata\MediaBundle\Entity\GalleryManager:
alias: sonata.media.manager.gallery
Sonata\MediaBundle\Admin\GalleryAdmin:
alias: sonata.media.admin.gallery
```

Thats it.

**Notice that the uploader won't work for Providers like: YouTubeProvider, VimeoProvider!**

Expand Down

0 comments on commit 46fa094

Please sign in to comment.