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 degetServiceLocator(). 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
$dba 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