我刚刚发现了一种关于特征的意外行为.
在symfony 6.2项目中,我在控制器中使用了一个特征.当调用$this->;getUser()或$this->;isGranted()时,它实际上将正确执行并获取用户或投票者结果,就像它在控制器类中执行一样.
显然,特征的代码是在控制器类的上下文中执行的,因此在此场景中,控制器的属性/方法在特征中可用.
这是故意的行为,还是仅仅是我不应该依赖的副作用?
伪代码:
class SomeController extends AbstractController
{
use SomeTrait;
#[Route('/api/some-route', methods:['GET'])]
public function doSomething(){
// code
$this->callTraitMethod();
// code
}
}
trait SomeTrait
{
public function callTraitMethod()
{
// code
$this->getUser(); // works correctly !
// code
}
}