Har*_*llu 7 zend-framework zend-tool
我已经使用composer安装了zend工具
$ composer require zendframework/zftool:dev-master
Run Code Online (Sandbox Code Playgroud)
已经安装了zftool,当我运行php /vender/bin/zf.php模块时,它会抛出警告
PHP不推荐使用:您正在从类ZFTool\Controller\ModuleController中检索服务定位器.请注意,ServiceLocatorAwareInterface已弃用,将在3.0版中与ServiceLocatorAwareInitializer一起删除....
我正在使用Ubuntu
有几个解决方案:
E_USER_DEPRECATED报告.这只是掩盖了这个问题."zendframework/zend-mvc:~2.6.0"专门针对2.6系列,并且不会安装2.7系列).这再一次掩盖了问题,如果将安全补丁应用于zend-mvc的后续次要版本,则可能会使您的应用程序不安全.getServiceLocator().这是推荐的路径.完成后一点的方法是确保在实例化期间注入控制器的所有依赖项.这意味着:
getServiceLocator().举个例子,假设你的控制器里有这样的东西:$db = $this->getServiceLocator()->get('Db\ApplicationAdapter');
您可以按如下方式更改代码:
$db在您的班级中添加一个属性.$db = $this->db(或只使用属性!)所以:
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(/* ... */);
/* ... */
}
}
Run Code Online (Sandbox Code Playgroud)
你的工厂看起来像这样:
class YourControllerFactory
{
public function __invoke($container)
{
return new YourController($this->get('Db\ApplicationAdapter'));
}
}
Run Code Online (Sandbox Code Playgroud)
在您的应用程序或模块配置中,您可以将此工厂映射到控制器:
return [
'controllers' => [
'factories' => [
YourController::class => YourControllerFactory::class,
/* ... */
],
/* ... */
],
/* ... */
];
];
Run Code Online (Sandbox Code Playgroud)
这可能看起来像很多步骤.但是,它确保您的代码没有隐藏的依赖关系,提高代码的可测试性,并允许您通过配置替换替代备选方案.
| 归档时间: |
|
| 查看次数: |
5059 次 |
| 最近记录: |