Open djschilling opened 11 months ago
Hi @djschilling,
I will have a look at this in the evening :)
This seems to be a bigger problem than I thought. This is, like I thought, a problem with magic constants. When a class is matched by AOP, it will be proxied and woven. The proxy is a 1:1 copy of the original class which extends and includes the woven class. The woven class is the class that does the whole AOP logic. Inside the proxied class I can replace all magic constants, which works. I will commit this change shortly.
But here is where it gets complicated, lets imagine a matched class has a trait or extends another class. If that class also includes magic constants like __class__
or even self::class
, they also have to be resolved, but won't be, because they itself aren't matched, only the class that uses them.
Problems:
ClassLoader
loads a class, it cannot be replaced (at least in the ClassLoader
itself, maybe there is a spl_
function that can achieve that?)Problems:
Hi @djschilling,
I have released Okapi/AOP - 1.2.9
which fixes the bug partially. You should have no problems when using __DIR__
anymore, but when your matched class has a trait/interface/parent class
which uses __class__
or self::class
and is not matched by any aspect, it might have a __AopProxied
suffix. Besides that, everything should work fine now, especially for your use-case :)
I'm keeping this issue open for the other bugs.
I updated to 1.2.9 but this is still not working:
public function getGroupsWhereUserCan($permission, ?array $groupIds = null): array {
include_once dirname(__DIR__, 3) . '/churchdb/churchdb_db.php';
return \getMyGroupIdsWhereIAmAllowed($permission, null, $groupIds);
}
Here is the error:
include_once(/private/var/folders/nx/1shmdfr54sv9r22ql0c4dh680000gn/T/ct-aop-cache/32117/proxies/churchdb/churchdb_db.php): Failed to open stream: No such file or directory
/private/var/folders/nx/1shmdfr54sv9r22ql0c4dh680000gn/T/ct-aop-cache/32117/proxies/src/Auth/Permissions/PermChecker.php:309
/private/var/folders/nx/1shmdfr54sv9r22ql0c4dh680000gn/T/ct-aop-cache/32117/proxies/src/Auth/Permissions/PermChecker.php:309
/Users/david/projects/churchtools/system/src/Domain/Finance/CostCenter/CostCentersAccountingPeriodPermissionResolver.php:40
PermChecker.php : system/src/Auth/Permissions/PermChecker.php churchdb_db.php: system/churchdb/churchdb_db.php
Hi @djschilling,
I will try it with your code and see what's going wrong.
Hi @djschilling,
Sadly I can't reproduce your error.
I tried testing it like this: $this->data = require dirname(__DIR__, 3) . '/AdviceBehavior/Include/Database/data.php';
and it worked without a problem.
The code in the __AopProxied
class does look like this: require dirname('C:\Projects\okapi\php-aop\tests\Functional\AdviceBehavior\Include\Target', 3) . '/AdviceBehavior/Include/Database/data.php';
Can you tell me what your proxy file looks like?
I have some php code that looks like this:
The lives in a class for which php-aop creates a proxy. The file
churchdb_db.php
does not need a proxy and so theinclude
does not work. How can i solve this?