How to use my custom Symfony 3.0 Library/Bundle/HowIsCalled

Dimitrios Desyllas

By looking these piece of documentation:

I have made this Library:

<?php
namespace Acme\HelloBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;

class Image extends ConfigurableExtension
{
    /*The size of the thumbnail*/
    private $thumb_max_width=100;
    private $thumb_max_height=100;
    /*End of: "The size of the thumbnail"*/

    private $image_width=0;
    private $image_height=0;

    /**
    *Contains the Image Data
    */
    private $image=null;

    protected function setThumbHeight($value)
    {
      $thumb_max_height=$value>0?$value:0;
    }

    protected function setThumbWidth($value)
    {
      $thumb_max_width=$value>0?$value:0;
    }

    /**
    *Function that Loads the configuration
    */
    protected function loadInternal(array $mergedConfig, ContainerBuilder $container)
    {
        var_dump($mergedConfig);
    }

    /**
    *Loads a $file from $extention
    *@param $file {String} The path of file
    *@param $extention {String} the type or the extention of the image
    *
    *@return This Object Instance
    */
    public function load($file)
    {

      $extention= exif_imagetype($file);

      switch($extention)
      {
        case IMAGETYPE_PNG:
          $this->image=imagecreatefrompng($file);
          break;

        case IMAGETYPE_JPEG:
          $this->image=imagecreatefromjpeg($file);
          break;

        case IMAGETYPE_GIF:
          $this->image=imagecreatefromgif($file);
          break;
      }

      $this->image_width=imagesx($this->image);
      $this->image_height=imagesy($this->image);
      return $this;
    }

    /**
    * Resizes an Image
    * @param $width {Int} The new images width
    * @param $height {Int} The new Images Height
    *
    * @return The Object Instance
    */
    public function resize($width,$height)
    {
      $new_image=imagecreatetruecolor($width,$height);
      imagecopyresampled($new_image,$this->image, 0, 0, 0, 0,$width,$height);

      /*Set the new data to the Image*/
      imagedestroy($this->image);
      $this->image=$new_image;
      /*End of: "Set the new data to the Image"*/

      return $this;
    }

    /**
    *Generates a thumbnail of the image
    *The thumbnail size is retrieved from configuration
    *
    * @return The Object Instance
    */
    public function to_thumb()
    {
      $width=0;
      $width=0;

      /*Determine the resize width and height*/
      $source_aspect_ratio = $this->image_width / $this->image_height;
      $thumbnail_aspect_ratio = $this->thumb_max_width / $this->thumb_max_height;

      if ($this->image_width <= $this->thumb_max_width && $this->image_height <= $this->thumb_max_height)
      {
        $width = $this->image_width;
        $height = $this->image_height;
      }
      elseif ($thumbnail_aspect_ratio > $source_aspect_ratio)
      {
        $width = (int) ($this->thumb_max_height * $source_aspect_ratio);
        $height = $this->thumb_max_height;
      }
      else
      {
        $width = $this->thumb_max_width;
        $height = (int) ($this->thumb_max_width / $source_aspect_ratio);
      }
      /*End of: "Determine the resize width and height"*/

      $this->resize($width,$width);

      return $this;
    }

    /**
    *Exports the image to a file
    *@param file {String} The file path
    */
    public function export($file)
    {
      $ext = pathinfo($file, PATHINFO_EXTENSION);
      $ext=strtolower($ext);

      $write=false;

      switch($ext)
      {
        case 'png':
          imagesavealpha($this->image,true);
          $write=imagepng($this->image,$file);
        case 'jpeg':
        case 'jpg':
          $write=imagejpeg($this->image,$file);
        case 'gif':
          $write=imagegif($this->image,$file);
      }
      imagedestroy($this->image);
    }
}
?>

The library above is located in src/AppBundle/ImageBundle/DependencyInjection/Image.php. And I want to be able to load it either in an Entity (on a Doctrine hook) or in a Controller. But I have no idea how to do it.

chalasr

You are making too complicated stuff.

First, you cannot have a bundle inside a bundle (you said src/AppBundle/ImageBundle).

Then, your Library doesn't need to extend ConfigurableExtension.
So, after create a clean standalone bundle (php app/console generate:bundle),
create a Util directory into, move the class into and change it like :

namespace ImageBundle\Util;

class Image
{
    // Methods
}

Then, you can declare it as a service :

# app/config/services.yml
acme_image:
    class: ImageBundle\Util\Image

In a controller, use it like this :

$image = $this->get('acme_image');

In an entity (can't access the service container), just create a new instance of your class :

$image = new ImageBundle\Util\Image();

Note that Symfony is primarily a PHP framework.
Of course, there is very cool features and some complicated things at the first try, but it stays PHP.

EDIT

To use the arguments injected from the class of your service, just retrieve and define them in your constructor.

For example, inject the doctrine EntityManager:

# app/config/services.yml
acme_image:
    class: ImageBundle\Util\Image
    arguments: [ "@doctrine.orm.entity_manager" ]

Then, retrieve it from your class:

use Doctrine\ORM\EntityManagerInterface;
// ...

class Image
{
    private $em;

    public function __construct(EntityManagerInterface $entityManager)
    {
         $this->em = $entityManager;
    }

    // ...

    public function doSomething()
    {
        // Use the defined property
        $repository = $this->em->getRepository(...);

        // ... 
    }
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Symfony EntityType - How to use custom layout?

From Dev

Symfony 4 how to use my own Bundle

From Dev

How to use mysql custom port in c3p0 datasource?

From Dev

How to tell symfony to load my custom routing.yml configuration

From Dev

how to force magento to use my custom price

From Dev

How to use the dot command (.) in my custom command?

From Dev

Symfony2: How to use constraints on custom compound form type?

From Dev

How to create and use a form in a custom class in Symfony 2

From Dev

Symfony2: How to use constraints on custom compound form type?

From Dev

How do I use my new custom view in my ListView?

From Dev

How to use my custom minimize/close window buttons in my QMainWindow?

From Dev

How to use Grouped Use statements with Symfony3?

From Dev

How will Identity know to use my custom implementations of its core interfaces?

From Dev

RoboGuice: how to use RoboGuice-provided injections in my custom class?

From Dev

How can I use my custom class in a view on Laravel 5

From Java

How to use standard attribute android:text in my custom view?

From Dev

JavaScript: How to clear my custom keyboard mappings and use the default ones

From Dev

How do I use my custom ServiceStack authentication provider with Redis?

From Dev

How to make the android LayoutInflater use my Custom Resources

From Dev

How to use my custom system call with its name and not with its number

From Dev

How can I use my php in Twig (custom controller?)

From Dev

How to use networkx algorithm with my custom graph datastructure?

From Dev

how do i use the search view to seach my custom listview

From Dev

How to use standard attribute android:text in my custom view?

From Dev

How to make my custom linked list to use generics?

From Dev

JavaScript: How to clear my custom keyboard mappings and use the default ones

From Dev

How to tell intel graphics to use my custom EDID file?

From Dev

How use the hash in my custom login laravel5

From Dev

How will Identity know to use my custom implementations of its core interfaces?

Related Related

  1. 1

    Symfony EntityType - How to use custom layout?

  2. 2

    Symfony 4 how to use my own Bundle

  3. 3

    How to use mysql custom port in c3p0 datasource?

  4. 4

    How to tell symfony to load my custom routing.yml configuration

  5. 5

    how to force magento to use my custom price

  6. 6

    How to use the dot command (.) in my custom command?

  7. 7

    Symfony2: How to use constraints on custom compound form type?

  8. 8

    How to create and use a form in a custom class in Symfony 2

  9. 9

    Symfony2: How to use constraints on custom compound form type?

  10. 10

    How do I use my new custom view in my ListView?

  11. 11

    How to use my custom minimize/close window buttons in my QMainWindow?

  12. 12

    How to use Grouped Use statements with Symfony3?

  13. 13

    How will Identity know to use my custom implementations of its core interfaces?

  14. 14

    RoboGuice: how to use RoboGuice-provided injections in my custom class?

  15. 15

    How can I use my custom class in a view on Laravel 5

  16. 16

    How to use standard attribute android:text in my custom view?

  17. 17

    JavaScript: How to clear my custom keyboard mappings and use the default ones

  18. 18

    How do I use my custom ServiceStack authentication provider with Redis?

  19. 19

    How to make the android LayoutInflater use my Custom Resources

  20. 20

    How to use my custom system call with its name and not with its number

  21. 21

    How can I use my php in Twig (custom controller?)

  22. 22

    How to use networkx algorithm with my custom graph datastructure?

  23. 23

    how do i use the search view to seach my custom listview

  24. 24

    How to use standard attribute android:text in my custom view?

  25. 25

    How to make my custom linked list to use generics?

  26. 26

    JavaScript: How to clear my custom keyboard mappings and use the default ones

  27. 27

    How to tell intel graphics to use my custom EDID file?

  28. 28

    How use the hash in my custom login laravel5

  29. 29

    How will Identity know to use my custom implementations of its core interfaces?

HotTag

Archive