无法从其他类访问属性

时间:2017-08-01 11:02:12

标签: php symfony

这是代码(不包括命名空间,路由):

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();

2 个答案:

答案 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();时,没有错误和"无论什么"出现(所以原文)。