Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
getProxyCode example
use
Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use
Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\LazyServiceDumper;
class
LazyServiceDumperTest
extends
TestCase
{
public
function
testProxyInterface
(
)
{
$dumper
=
new
LazyServiceDumper
(
)
;
$definition
=
(
new
Definition
(
ContainerInterface::
class
)
)
->
setLazy
(
true
)
;
$this
->
assertTrue
(
$dumper
->
isProxyCandidate
(
$definition
)
)
;
$this
->
assertStringContainsString
(
'function get(',
$dumper
->
getProxyCode
(
$definition
)
)
;
}
public
function
testFinalClassInterface
(
)
{
$dumper
=
new
LazyServiceDumper
(
)
;
$definition
=
(
new
Definition
(
TestContainer::
class
)
)
->
setLazy
(
true
)
->
addTag
(
'proxy',
[
'interface' => ContainerInterface::
class
]
)
;
$this
->
assertTrue
(
$dumper
->
isProxyCandidate
(
$definition
)
)
;
$this
->
assertStringContainsString
(
'function get(',
$dumper
->
getProxyCode
(
$definition
)
)
;
}
class
NullDumperTest
extends
TestCase
{
public
function
testNullDumper
(
)
{
$dumper
=
new
NullDumper
(
)
;
$definition
=
new
Definition
(
'stdClass'
)
;
$this
->
assertFalse
(
$dumper
->
isProxyCandidate
(
$definition
)
)
;
$this
->
assertSame
(
'',
$dumper
->
getProxyFactoryCode
(
$definition
, 'foo', '(false)'
)
)
;
$this
->
assertSame
(
'',
$dumper
->
getProxyCode
(
$definition
)
)
;
}
}
ksort
(
$definitions
)
;
foreach
(
$definitions
as
$definition
)
{
if
(
!
$proxyDumper
->
isProxyCandidate
(
$definition
)
)
{
continue
;
}
if
(
isset
(
$alreadyGenerated
[
$class
=
$definition
->
getClass
(
)
]
)
)
{
continue
;
}
$alreadyGenerated
[
$class
]
= true;
// register class' reflector for resource tracking
$this
->container->
getReflectionClass
(
$class
)
;
if
(
"\n" ===
$proxyCode
= "\n".
$proxyDumper
->
getProxyCode
(
$definition
)
)
{
continue
;
}
if
(
$this
->inlineRequires
)
{
$lineage
=
[
]
;
$this
->
collectLineage
(
$class
,
$lineage
)
;
$code
= '';
foreach
(
array_diff_key
(
array_flip
(
$lineage
)
,
$this
->inlinedRequires
)
as
$file
=>
$class
)
{
if
(
$this
->inlineFactories
)
{
$this
->inlinedRequires
[
$file
]
= true;
}
public
function
testIsProxyCandidate
(
Definition
$definition
, bool
$expected
)
{
$this
->
assertSame
(
$expected
,
$this
->dumper->
isProxyCandidate
(
$definition
)
)
;
}
public
function
testGetProxyCode
(
)
{
$definition
=
new
Definition
(
__CLASS__
)
;
$definition
->
setLazy
(
true
)
;
$code
=
$this
->dumper->
getProxyCode
(
$definition
)
;
$this
->
assertStringMatchesFormat
(
'%Aclass ProxyDumperTest%aextends%w'
.'\Symfony\Bridge\ProxyManager\Tests\LazyProxy\PhpDumper\ProxyDumperTest%a',
$code
)
;
}
public
function
testDeterministicProxyCode
(
)
{
$definition
=
new
Definition
(
__CLASS__
)
;
$file
=
$r
->
getFileName
(
)
;
if
(
str_ends_with
(
$file
, ') : eval()\'d code'
)
)
{
$file
=
substr
(
$file
, 0,
strrpos
(
$file
, '(', -17
)
)
;
}
if
(
is_file
(
$file
)
)
{
$this
->container->
addResource
(
new
FileResource
(
$file
)
)
;
}
$r
=
$r
->
getParentClass
(
)
?: null;
}
while
(
$r
?->
isUserDefined
(
)
)
;
}
if
(
"\n" ===
$proxyCode
= "\n".
$proxyDumper
->
getProxyCode
(
$definition
,
$id
)
)
{
continue
;
}
if
(
$this
->inlineRequires
)
{
$lineage
=
[
]
;
$this
->
collectLineage
(
$class
,
$lineage
)
;
$code
= '';
foreach
(
array_diff_key
(
array_flip
(
$lineage
)
,
$this
->inlinedRequires
)
as
$file
=>
$class
)
{
if
(
$this
->inlineFactories
)
{
$this
->inlinedRequires
[
$file
]
= true;
}
final
class
LazyServiceInstantiator
implements
InstantiatorInterface
{
public
function
instantiateProxy
(
ContainerInterface
$container
, Definition
$definition
, string
$id
, callable
$realInstantiator
)
: object
{
$dumper
=
new
LazyServiceDumper
(
)
;
if
(
!
$dumper
->
isProxyCandidate
(
$definition
,
$asGhostObject
,
$id
)
)
{
throw
new
InvalidArgumentException
(
sprintf
(
'Cannot instantiate lazy proxy for service "%s".',
$id
)
)
;
}
if
(
!
class_exists
(
$proxyClass
=
$dumper
->
getProxyClass
(
$definition
,
$asGhostObject
)
, false
)
)
{
eval
(
$dumper
->
getProxyCode
(
$definition
,
$id
)
)
;
}
return
$asGhostObject
?
$proxyClass
::
createLazyGhost
(
$realInstantiator
)
:
$proxyClass
::
createLazyProxy
(
$realInstantiator
)
;
}
}
$file
=
$r
->
getFileName
(
)
;
if
(
str_ends_with
(
$file
, ') : eval()\'d code'
)
)
{
$file
=
substr
(
$file
, 0,
strrpos
(
$file
, '(', -17
)
)
;
}
if
(
is_file
(
$file
)
)
{
$this
->container->
addResource
(
new
FileResource
(
$file
)
)
;
}
$r
=
$r
->
getParentClass
(
)
?: null;
}
while
(
$r
?->
isUserDefined
(
)
)
;
}
if
(
"\n" ===
$proxyCode
= "\n".
$proxyDumper
->
getProxyCode
(
$definition
,
$id
)
)
{
continue
;
}
if
(
$this
->inlineRequires
)
{
$lineage
=
[
]
;
$this
->
collectLineage
(
$class
,
$lineage
)
;
$code
= '';
foreach
(
array_diff_key
(
array_flip
(
$lineage
)
,
$this
->inlinedRequires
)
as
$file
=>
$class
)
{
if
(
$this
->inlineFactories
)
{
$this
->inlinedRequires
[
$file
]
= true;
}
final
class
LazyServiceInstantiator
implements
InstantiatorInterface
{
public
function
instantiateProxy
(
ContainerInterface
$container
, Definition
$definition
, string
$id
, callable
$realInstantiator
)
: object
{
$dumper
=
new
LazyServiceDumper
(
)
;
if
(
!
$dumper
->
isProxyCandidate
(
$definition
,
$asGhostObject
,
$id
)
)
{
throw
new
InvalidArgumentException
(
sprintf
(
'Cannot instantiate lazy proxy for service "%s".',
$id
)
)
;
}
if
(
!
class_exists
(
$proxyClass
=
$dumper
->
getProxyClass
(
$definition
,
$asGhostObject
)
, false
)
)
{
eval
(
$dumper
->
getProxyCode
(
$definition
,
$id
)
)
;
}
return
$asGhostObject
?
$proxyClass
::
createLazyGhost
(
$realInstantiator
)
:
$proxyClass
::
createLazyProxy
(
$realInstantiator
)
;
}
}