这是代码(不包括命名空间,路由):
class OneController extends Controller{
public $variable = "whatever";
public function changeVariableAction(){
$this->variable = "whenever";
// any code...
$this->redirectToRoute("class_two_route_name");
}
}
use AppBundle\Controller\OneController;
class Two{
public function otherFunctionAction(){
$reference = new One();
return new Response($reference->variable);
}
}
为什么我会“随时”看到“无论什么”?我知道执行changeVariableAction()
的代码中没有行,但当sb进入class One
中匹配此操作的路由时,它正在被执行???
修改
当我在SF3之外编写方案时,我很好。
class One{
public $variable = "whatever";
public function changeVariable(){
$this->variable = "whenever";
}
}
class Two{
public function otherFunction(){
$reference = new One();
$reference->changeVariable();
echo $reference->variable;
}
}
$reference2 = new Two();
$reference2->otherFunction();
答案 0 :(得分:0)
你正在看"随便"而不是"每当"因为这一行:
the index and the length should be specified on a position in the string . parameter : Length
通过调用" new One();"你正在创建一个新的类实例" OneController"因此,它将设置其默认值"无论"作为函数" changeVariableAction"未在新实例$ reference中调用。
答案 1 :(得分:0)
经过研究,我可以看到在SF中(因为它是一个框架),我们不会将Action函数视为典型函数(它关于http等),所以我们不能在另一个类中执行它们。而且,Action函数中的整个代码不会影响Action函数之外的代码。获取新属性值的唯一方法是通过url中的参数发送它们(我不认为我们想要这样)或发送到db并从另一个类的数据库中检索它。
以下是证据:
class FirstController extends Controller{
public $variable = "whatever";
/**
* @Route("/page")
*/
public function firstAction(){
$this->variable = "whenever";
return $this->redirectToRoute("path");
}
}
class SecondController{
/**
* @Route("/page/page2", name = "path")
*/
public function secondAction(){
$reference = new FirstController();
$reference->firstAction();
return new Response($reference->variable);
}
}
此代码给出错误:在null上调用成员函数get()。
当我删除行$reference->firstAction();
时,没有错误和"无论什么"出现(所以原文)。