I've never had any success with extending entities because you always
end up with a class that cant be used after you extend the entity. I
see a lot of people using "Base" entities which is essentially the
same thing as a model which an entity extends.

Create a mapped super class which inherits your user model. Then
create the entity to extend that mapped super class. In the mapped
super class create mapping between your entity and user model.

You don't need the oneb ut it's nice to have a mapping layer in
between them in case the apps use different variable names.

//Models/User.php
namespace Models;

/** @MappedSuperclass */

class User
{

       protected $username;
       protected $userid;
       protected $groups;

        public function __call($method, $args)
        {
            if (strpos($method, 'get') === 0) {
                return $this->get(substr($method, 3));
            } else if (strpos($method, 'set') === 0) {
                $this->set(substr($method, 3), $args[0]);
            } else {
                throw new \Exception('Method '.$method.' not found in
class: ' . get_class($this));
            }
        }

        public function get($name) {
            return $this->{strtolower($name)};
        }

        public function set($name, $value)
        {
            $this->{strtolower($name)} = $value;
        }
}

//Entities/User.php
namespace Entities;
/**
* User
*
* @Table(name="user")
* @Entity
*/
class User extends \Models\User
{

    public function __construct()
    {
        //parent::__construct doesn't exist by default
        //it only exists if it's explicitly defined
        if (is_callable('parent::__construct')) {
            parent::__construct();
        }

        //set up default collections so it doesn't break on empty
instantiation
        $this->groups = new \Doctrine\Common\Collections
\ArrayCollection();
    }


    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", nullable=true)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

     /**
     * @var string $name
     *
     * @Column(name="name", type="string", length=16, nullable=false)
     */
      protected $name;

}

On May 23, 5:06 pm, Problematic <djsto...@gmail.com> wrote:
> I'm looking for an appropriate way to reduce coupling in a messaging bundle
> I'm writing, so that I can easily use it between applications.
>
> Each instance of the Message entity should have a sender and a recipient,
> instanceof Symfony\Component\Security\Core\User\UserInterface, which I can
> require just fine in the setters for the properties. However, in setting up
> the ORM relationships, it seems that I have to specifically set a
> targetEntity (Foo\BarBundle\Entity\User, for example), which means that all
> further uses of the Message entity in different applications will either
> require a code change, or shoehorn them into using a User entity, which
> doesn't seem to me to be in a messaging bundle's scope to require.
>
> Any suggestions/best practices on how I can reduce coupling in this
> instance?

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en

Reply via email to