2017 © Pedro Peláez
 

symfony-bundle ev-copy-bundle

This is a Symfony2 Bundle helps you to copy an entity

image

ev/ev-copy-bundle

This is a Symfony2 Bundle helps you to copy an entity

  • Tuesday, June 23, 2015
  • by evalandgo
  • Repository
  • 3 Watchers
  • 4 Stars
  • 726 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 3 Versions
  • 4 % Grown

The README.md

EVCopyBundle

This is a Symfony Bundle helps you to copy an entity with its dependencies, (*1)

Features

  • Easily configure the copying behavior of entities

Installation

In composer.json file, add :, (*2)

{
    "require": {
        "ev/ev-copy-bundle": "^1.2"
    }
}

In app/AppKernel.php file, add :, (*3)

public function registerBundles()
{
    return array(
        // ...
        new EV\CopyBundle\EVCopyBundle(),
        // ...
    );
}

Entity configuration

Annotations

  • @Copy\Simple : Takes the value and adding to the copy, (*4)

  • @Copy\Variable : Set the value based on parameters given to Cloner, (*5)

    Required attributes:, (*6)

    • name
  • @Copy\Collection : Copy each entity of collection, (*7)

    Optional attributes:, (*8)

    • memorizeMatching : Enable the matching memory and define a name of the memory bag
  • @Copy\Entity : Copy the entity, (*9)

  • @Copy\UseMatching : Takes an entity copied previously. It uses the matching memory system, (*10)

    Required attributes:, (*11)

    • name : Name of the memory bag
  • @Copy\Construct : Gives parameters to the constructor based on parameters given to Cloner, (*12)

    Required attributes:, (*13)

    • variables : Array of parameters

Example

namespace EV\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use EV\CopyBundle\Annotation as Copy;

class Article
{

    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @ORM\Column(name="title", type="string", length=255)
     * @Copy\Variable(name="articleTitle")
     */
    private $title;

    /**
     * @ORM\Column(name="content", type="text")
     * @Copy\Simple
     */
    private $content;

    /**
     * @ORM\Column(name="date", type="datetime")
     */
    private $date;

    /**
     * @ORM\OneToOne(targetEntity="EV\BlogBundle\Entity\Options", cascade={"persist","remove"})
     * @ORM\JoinColumn(name="optionsId", referencedColumnName="id")
     * @Copy\Entity
     */
    private $options;

    /**
     * @ORM\ManyToOne(targetEntity="EV\BlogBundle\Entity\Author", inversedBy="articles")
     * @ORM\JoinColumn(name="authorId", referencedColumnName="id", nullable=false)
     * @Copy\Simple
     */
    private $author;

    /**
     * @ORM\OneToMany(targetEntity="EV\BlogBundle\Entity\Comment", mappedBy="article", cascade={"persist"})
     * @Copy\Collection
     */
    private $comments

    /**
     * @ORM\ManyToOne(targetEntity="EV\BlogBundle\Entity\Blog", inversedBy="articles")
     * @ORM\JoinColumn(name="blogId", referencedColumnName="id", onDelete="cascade")
     */
    protected $blog;

    /**
     * @Copy\Construct(variables={"blog"})
     */
    public function __construct(Blog $blog)
    {
        $this->blog = $blog;
        $this->date = new \DateTime('now');
    }

    // Getters, Setters and Adders methods...

    public function addComment(\EV\BlogBundle\Entity\Comment $comment)
    {
        $this->comments[] = $comment;

        // IMPORTANT : without this line, the copy won't work
        $comment->setArticle($this);

        return $this;
    }

}
namespace EV\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use EV\CopyBundle\Annotation as Copy;

class Comment
{

    /**
     * @ORM\Column(name="pseudo", type="string", length=255)
     * @Copy\Simple
     */
    $pseudo;

    /**
     * @ORM\Column(name="content", type="text")
     * @Copy\Simple
     */
    $content;

    /**
     * @ORM\ManyToOne(targetEntity="EV\BlogBundle\Entity\Article", inversedBy="comments")
     * @ORM\JoinColumn(name="articleId", referencedColumnName="id", nullable=false)
     */
    protected $article;

    // Getters, Setters and Adders methods...

}

Usage example


public function articleCopyAction() { //... $params = array( 'blog' => $blog, 'articleTitle' => $article->getTitle().' - Copy' ); $articleCopy = $this->get('ev_copy.factory.cloner')->copy($article, $params); //... }

Future features

  • Add an annotation in order to condition the copy of a parameter
  • Define an order to copy parameters

How to contribute

To contribute just open a Pull Request with your new code taking into account that if you add new features or modify existing ones you have to document in this README what they do., (*14)

License

EVCopyBundle is licensed under MIT, (*15)

The Versions

23/06 2015

dev-master

9999999-dev http://github.com/evalandgo/EVCopyBundle

This is a Symfony2 Bundle helps you to copy an entity

  Sources   Download

MIT

The Requires

 

bundle doctrine entity copy clone entities cloner

23/06 2015

1.1.0

1.1.0.0 http://github.com/evalandgo/EVCopyBundle

This is a Symfony2 Bundle helps you to copy an entity

  Sources   Download

MIT

The Requires

 

bundle doctrine entity copy clone entities cloner

10/06 2015

1.0.0

1.0.0.0 http://github.com/evalandgo/EVCopyBundle

This is a Symfony2 Bundle helps you to copy an entity

  Sources   Download

MIT

The Requires

 

bundle doctrine entity copy clone entities cloner