Skip to content

Instantly share code, notes, and snippets.

@woodworker
Created September 23, 2013 19:42
Show Gist options
  • Save woodworker/6675854 to your computer and use it in GitHub Desktop.
Save woodworker/6675854 to your computer and use it in GitHub Desktop.
Provider Samples
<?php
namespace Acme\Provider;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\ODM\MongoDB\Mapping\Driver\AnnotationDriver as MdbAnnotationDriver;
use gthm\partlets\system\Config;
use rg\injektor\Provider;
/**
* Provider for a customized AnnotationReader class.
* @service
*/
class AnnotationReaderProvider implements Provider {
/**
* @var AnnotationReader
*/
private $annotationReader;
/**
* @inject
* @param Config $config
*/
public function __construct(Config $config) {
$this->annotationReader = new AnnotationReader();
foreach ($config->get('doctrine2', 'ignoreAnnotations') as $annotationName) {
$this->annotationReader->addGlobalIgnoredName($annotationName);
}
MdbAnnotationDriver::registerAnnotationClasses();
AnnotationRegistry::registerAutoloadNamespace(
'Symfony\\Component\\Routing', $config->get('root').'/vendor/symfony/routing/'
);
}
/**
* @return AnnotationReader
*/
public function get() {
return $this->annotationReader;
}
}
<?php
namespace Acme\Provider;
use rg\injektor\Provider;
use Symfony\Component\HttpFoundation\Request;
class CurrentRequestProvider implements Provider {
/**
* @var Request
*/
private static $instance;
public function __construct() {
if (self::$instance) {
return;
}
self::$instance = Request::createFromGlobals();
}
/**
* @return Request
*/
public function get() {
return self::$instance;
}
}
<?php
namespace Acme\Provider;
use p2ee\Preparables\Preparer;
use p2ee\Partlets\PartletRequirement;
use p2ee\Partlets\PartletResolver;
use p2ee\BaseRequirements\Requirements\RequestDataRequirement;
use p2ee\BaseRequirements\Requirements\ServiceRequirement;
use p2ee\BaseRequirements\Resolvers\RequestDataResolver;
use p2ee\BaseRequirements\Resolvers\ServiceResolver;
use rg\injektor\Provider;
/**
* @service
*/
class PreparerProvider implements Provider {
protected $instance;
protected $serviceResolver;
protected $requestDataResolver;
protected $partletResolver;
/**
* @inject
* @param ServiceResolver $ServiceResolver
* @param RequestDataResolver $RequestDataResolver
* @param PartletResolver $PartletResolver
*/
public function __construct(ServiceResolver $ServiceResolver, RequestDataResolver $RequestDataResolver, PartletResolver $PartletResolver) {
$this->serviceResolver = $ServiceResolver;
$this->requestDataResolver = $RequestDataResolver;
$this->partletResolver = $PartletResolver;
}
protected function build(){
if($this->instance instanceof Preparer){
return;
}
$this->instance = new Preparer([
ServiceRequirement::class => $this->serviceResolver,
RequestDataRequirement::class => $this->requestDataResolver,
PartletRequirement::class => $this->partletResolver,
]);
}
public function get() {
$this->build();
return $this->instance;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment