Comments (9)
@TomasVotruba https://github.com/lookyman/nette-auto-factory I need to stress that it has massive limitations (constructor arguments) and is basically just an exercise in using PhpGenerator
.
from di.
The anonymous class solution would actually solve a problem I encountered just last week, where I tried to auto generate the interface itself. It works, but if you put it somewhere where the autoloading you already have doesn't see it, you are screwed. You have to either extend the PSR-4 autoload in composer.json, or register new path in RobotLoader in bootstrap. Neither of which you can do in runtime from an extension.
But, PHP 7 :/
Relevant https://github.com/lookyman/di/commit/6674d280d9f2911b63309903df20556315a2b2e2
from di.
👍
from di.
@lookyman How exactly in your case? And what was your issue? I didn't get that from referenced method.
from di.
I had an extension, gave it some path, it scanned it for all classes of some type, generated a factory interface for each of them (and wrote it to some file in another path), and registered that interface as a service in container. But if that path with generated interfaces was not under autoload, the container couldn't be instantiated (though it could be built).
Kdyby/Doctrine, for example, runs into similar issue for generated entity proxies. But the proxies are loaded when the application is already running, so you have time to register an autoloader in Container::initialize()
. In my case, you don't.
I have since abandoned that idea, but the commit I referenced could be used to solve this issue. Although I would much rather use the already existing afterCompile()
for this and pass it a reference to all generated classes, but that would be a big BC break.
from di.
@lookyman Pretty neat usage :) thanks for explaining.
Do you have this extension somewhere on Github? Would love to see that.
from di.
@lookyman I was wondering... how far from your package is to create same service lazy loader (using proxy) that has Symfony?
https://symfony.com/doc/current/service_container/lazy_services.html
That would be awesome extension :)
from di.
The problem with autogenerated intefaces is that is then you use in the code interfaces that actually don't exist. It will break code completing in IDE or API documentation generators.
Proxies don't have these problems, but they have another.
from di.
@dg I know, as I've said, that whole extension was just an excercise. Not really that useful, except perhaps in very specific circumstances.
Anyway, I LOVE the anonymous class thingy you've made here. Thanks.
from di.
Related Issues (20)
- Arguments are not unpacked when creating instance in DI extension HOT 1
- Decorators not called HOT 6
- Concatenate static parameter with string ends with exception HOT 2
- Malfunctioning use of variadic arguments in combination with autowired HOT 1
- Multifactory does not work
- Dynamic parameter does not work in static parameter HOT 27
- SearchExtension: compatible with trait Nette\StaticClass HOT 1
- Parent method with static type, has a badly evaluated return type for factory method in container
- Compiler error in process schema after update to 3.1.4 HOT 2
- Circular reference detected for variables HOT 5
- wrong inject of variables after update 3.1.6 > 3.1.7 HOT 3
- "ERROR: Circular reference detected for:" instead of creating Service with array of strings as parameters HOT 5
- Nette\DI\Config\Loader::load($filePath) loads string parameter '@12345' as string '@@12345' HOT 3
- Parameters defined using function notation in neon config not available when calling getParameter HOT 4
- Support `new` in initializers HOT 1
- Some releases were deleted HOT 1
- Calling ReflectionMethod::__construct() with 1 argument is deprecated in PHP 8.4
- Nette DI: suspicious dumping of objects when generating the container HOT 8
- "Object of class DateTimeImmutable could not be converted to string" after update to 3.2.0
- DI Extensions can not use parameters from app main configuration HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from di.