hclabs/model-manager-bundle

This package is abandoned and no longer maintained. No replacement package was suggested.

HCLabs Model Manager Bundle

Installs: 166

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 2

Forks: 0

Type:symfony-bundle

1.0.0-RC2 2014-05-11 20:19 UTC

This package is not auto-updated.

Last update: 2019-02-20 17:59:36 UTC


README

Build Status

A simple model manager.

Usage:

Add to your composer.json file:

"require": {
    // ...

    "hclabs/model-manager-bundle": "dev-master"
}

Service Definitions:

# src/Acme/AcmeDemoBundle/Resources/config/services.yml

parameters:
	acme.demo_entity.class:     "Acme\\DemoBundle\\Entity\\TestEntity"
    hclabs.model_manager.class: "HCLabs\\ModelManagerBundle\\Model\\ModelManager"

	acme.demo_controller.class: "Acme\\DemoBundle\\Controller\\DemoController"

services:
	acme.demo_model_manager:
    	class: "%hclabs.model_manager.class%"
        tags:
            - { name: hclabs.model_manager, entity: "%acme.demo_entity.class%" }

    acme.demo_controller:
        class: "%acme.demo_controller%"
        calls:
            - [setTestModelManager, ["@acme.demo_model_manager"]]

Example Entity:

<?php
// src/Acme/AcmeDemoBundle/Entity/TestEntity

class TestEntity
{
    /**
     * @var string
     */
    private $name;

    /**
     * @var bool
     */
    private $enabled;

    /**
     * Set name
     *
     * @param string $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * Set enabled
     *
     * @param bool $enabled
     */
    public function setEnabled($enabled)
    {
        $this->enabled = $enabled;
    }

    // ... getters
}

Example Controller:

<?php
// src/Acme/AcmeDemoBundle/Controller/DemoController.php

use HCLabs\ModelManagerBundle\Model\Contract\ModelManagerInterface;

class DemoController
{
	protected $manager;

	public function indexAction()
	{
	    /** @var string[] $criteria */
	    $criteria = ['name' => 'test'];

    	try {
        	$entity = $this->manager->findOrFail($criteria);
	    }
	    catch(EntityNotFoundException $e) {
	        $entity = $this->manager->create($criteria);
	    }
    
	    $entity->setEnabled(1);
    
	    $this->manager->persist($entity)->flush();

	    // some other stuff....
    
    }

    public function setTestModelManager(ModelManagerInterface $modelManager)
	{
		$this->manager = $modelManager;
	}
}

New:

The admin pool:

You can make use of the admin pool to get a manager for any managed entity. E.g.:

<?php
// src/Acme/AcmeDemoBundle/Controller/DemoController.php

use Symfony\Component\HttpFoundation\Request;
use HCLabs\ModelManagerBundle\Pool\ModelManagerPool;

class DemoController
{
    protected $pool;
    
    protected $formFactory;
    
    protected $twig;
    
    public function updateUserAction(Request $request)
    {
        $form = $this->formFactory->create('my_form_type');
        $form->handleRequest($request);
        
        if ($form->isValid()) {
            $user = $form->getData();

        	$manager = $this->pool->getManager($user);
        	
        	$manager->persist($user)->flush();
        	
        	return $this->twig->render(
        		'AcmeDemoBundle:Demo:update-success.html.twig',
        		['user' => $user]
        	);
        }
        
        return $this->twig->render(
        	'AcmeDemoBundle:Demo:edit.html.twig',
        	['form' => $form]
        );
    }
           
    public function setModelManagerPool(ModelManagerPool $pool)
    {
        $this->pool = $pool;
    }
    
    // Other service setters ...
}