我有什么:
services.yaml:
app.foo.bar:
class: App\Foo\Bar
arguments: #[ ... ]
Run Code Online (Sandbox Code Playgroud)
控制器:
app.foo.bar:
class: App\Foo\Bar
arguments: #[ ... ]
Run Code Online (Sandbox Code Playgroud)
它有效。
但由于Symfony\Bundle\FrameworkBundle\Controller\Controller已被弃用,我试图扩展Symfony\Bundle\FrameworkBundle\Controller\AbstractController并且我得到了
找不到服务“some_bundle.some_service”:即使它存在于应用程序的容器中,“App\Controller\MyController”中的容器是一个较小的服务定位器,只知道“doctrine”、“http_kernel”、“parameter_bag”, “request_stack”、“router”、“serializer”和“session”服务。尝试改用依赖注入。
我可以get()以某种方式使用AbstractController吗?AbstractController使用ControllerTrait,我想知道为什么会发生错误。
ehy*_*mel 11
与以前的版本相比,symfony4 中发生了很多变化。您正在使用所有内容,就像在以前的版本中一样。快速解决方案不是“首选”方式,但首先可以将public默认密钥更改false为trueservices.yaml 文件中的密钥。
更好的方法是将其保留为私有并使用依赖注入。服务的命名也发生了变化(现在只是服务的路径)。请参阅此处的文档。对于您的代码,请尝试以下操作:
// services.yaml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\Foo\Bar:
tags: { ** }
Run Code Online (Sandbox Code Playgroud)
以及具有依赖注入的控制器:
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class MyController extends AbstractController
{
public function baz(Request $request, Bar $bar)
{
$bar->doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一个关于这些事情(以及更多)的很好的教程。
| 归档时间: |
|
| 查看次数: |
5658 次 |
| 最近记录: |