zend-framework zend-tool

zend framework - PHP desaprobado: está recuperando el localizador de servicios de la clase ZFTool / Controller / ModuleController



zend-framework zend-tool (1)

Hay algunas soluciones:

  • En su error_reporting, desactive el informe E_USER_DEPRECATED . Esto simplemente enmascara el problema.
  • Pin a una versión anterior de zend-mvc (p. Ej., El compositor requiere "zendframework/zend-mvc:~2.6.0" fijará específicamente en la serie 2.6 y no instalará la serie 2.7). Esto, una vez más, simplemente enmascara el problema y posiblemente dejará su aplicación insegura si se aplican parches de seguridad a una versión menor posterior de zend-mvc.
  • Arregle su código para que ya no use getServiceLocator() . Esta es la ruta recomendada. La forma de lograr este último punto es garantizar que todas las dependencias de su controlador se inyecten durante la creación de instancias.

Esto significará:

  • Necesita crear fábricas para sus controladores.
  • Necesitará actualizar sus controladores para aceptar dependencias en sus constructores que se getServiceLocator() previamente de getServiceLocator() . Como ejemplo, digamos que tienes algo como esto en tu controlador:

$db = $this->getServiceLocator()->get(''Db/ApplicationAdapter'');

Cambiarías tu código de la siguiente manera:

  • Agregue una propiedad $db a su clase.
  • Actualice su constructor para aceptar el adaptador de base de datos y asígnelo a la propiedad.
  • Cambie la línea de arriba a simplemente $db = $this->db (¡o simplemente use la propiedad!)
  • Agregue una fábrica para su controlador, si no existe actualmente.

Asi que:

use Zend/Db/Adapter/AdapterInterface; use Zend/Mvc/Controller/AbstractActionController; class YourController extends AbstractActionController { private $db; public function __construct(AdapterInterface $db) { $this->db = $db; } public function someAction() { $results = $this->db->query(/* ... */); /* ... */ } }

Tu fábrica se vería así:

class YourControllerFactory { public function __invoke($container) { return new YourController($this->get(''Db/ApplicationAdapter'')); } }

En su aplicación o configuración de módulo, debe asignar esta fábrica a su controlador:

return [ ''controllers'' => [ ''factories'' => [ YourController::class => YourControllerFactory::class, /* ... */ ], /* ... */ ], /* ... */ ]; ];

Esto puede parecer un montón de pasos. Sin embargo, garantiza que su código no tenga dependencias ocultas, mejora la capacidad de prueba de su código y le permite hacer cosas geniales como alternativas sustitutivas a través de la configuración.

He instalado herramientas zend usando compositor

$ composer require zendframework/zftool:dev-master

zftool ha sido instalado y cuando ejecuto php /vender/bin/zf.php lista de módulos está lanzando advertencia

PHP en desuso: está recuperando el localizador de servicios dentro de la clase ZFTool / Controller / ModuleController. Tenga en cuenta que ServiceLocatorAwareInterface está en desuso y se eliminará en la versión 3.0, junto con ServiceLocatorAwareInitializer. ...

Estoy usando Ubuntu