chyba pri prvotnom zostaveni SystemContainer ak sluzba vyzaduje nenainstalovane rozsirenie

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
bazo
Člen | 620
+
0
-

v config.neon mam zapisanu sluzbu, ktora vyzaduje zeroMq php extension.

zmqSocketPublisher:
            class: \ZMQSocket(ZMQContext(), ::constant(ZMQ::SOCKET_REQ), 'events')

sluzba sa nikde nepouziva, nikde sa neinjectuje, nikam nie je predavana.
pri prvotnom zostaveni SystemContainer sa vyhodi vynimka
Nette\InvalidStateException
Class \ZMQSocket used in service ‚zmqSocketPublisher‘ has not been found or is not instantiable.

ak extension deaktivujem po zostaveni, vsetko je ok.

v time nas je 7 ludi, nie je potrebne, aby kazdy instaloval zero mq a php extension, ked robi na nesuvisejucich veciach.

predpokladam, ze to robi nejaka kontrola pri zostavovani containeru.

da sa to nejako vypnut?

Filip Procházka
Moderator | 4668
+
0
-

Nedá se to vypnout. dá se to ovšem obejít.

Buďto si vytvoříš konfigurák čistě pro ZeroMq, nebo si pro něj vytvoříš CompilerExtension.

class ZeroMqExtension extends Nette\Config\CompilerExtension
{
	public $defaults = array(
		// .. vychozi hodnoty
	);

	public function loadConfiguration()
	{
		if (!extension_loaded('zeromq')) {
			Nette\Diagnostics\Debugger::log('Extension ZeroMq is not enabled.', 'compile');
			return;
		}

		$config = $this->getConfig($this->defaults);
		$builder = $this->getContainerBuilder();

		$builder->addDefinition($this->prefix('socketPublisher'))
			->setClass('ZMQSocket', array(
				new Nette\DI\Statement('ZMQContext'),
				ZMQ::SOCKET_REQ,
				'events'
			));
	}
}

Ale nepovažuji to za nejlepší možné řešení – takhle můžou vznikat WTF situace.

Nejlepší řešení by bylo, kdyby si všichni zeromq nainstalovali – není dobré vyvíjet „velkou“ aplikaci ve více lidech, když nemají všichni alespoň podobné prostředí.

bazo
Člen | 620
+
0
-

to je pravda, ze to nie je najlepsie riesenie, ale naco je koderovi zero mq ked ma len stylovat web? to zero mq treba len na velmi specificku cinnost, s ktorou vacsina ani nepride do styku.

skusim teda ten extension, dik