在不在对象上下文中时使用$ this - 在Laravel控制器中

时间:2013-01-04 09:29:00

标签: php object controller laravel unhandled-exception

我正在使用Laravel,我刚刚将我在本地工作的代码移到了Live中,并在我的“用户”控制器中获得了以下异常:

Unhandled Exception
Message:
Using $this when not in object context

奇怪的是,这是一个类并且在本地工作正常,所以我不希望解决方案使用静态表示法。只有当我将其提升为Live时才会出现此错误。可能是Live中缺少的Laravel核心中没有正确加载控制器类的东西吗?

有没有人在将他们的代码推广到Live后经历过这个?任何想法?

更新:发生错误的代码片段。记住这段代码在本地运行,所以我相信缺少某些内容,而不是需要更改此代码来解决此问题。

class User_Controller extends Base_Controller {

...

public function action_register() {
   ...
    if ($user) {
        //Create the Contact
        DB::transaction(function() use ($user_id) {
            $org = $this->create_org($user_id); //failing on this line with exception. btw $user is created fine
            $this->create_contact($org->id);
            $this->create_address($org->id);
    });

    private function create_org($user_id) {
        $result = Org_type::where('name','=',$_POST['org_type'])->first();

        $org = Org::Create(
            array(
                'name' => $_POST['org_name'],
                'user_id' => $user_id,
                'org_type_id' => $result->id,
            )
        );
        return $org;
    }

...

1 个答案:

答案 0 :(得分:3)

似乎问题是你在$this函数提供的Closure中使用DB::transaction,我不知道为什么它会在 live < / s> local,但您必须将控制器的实例导入到函数中才能使用它。

为避免混淆,最好的方法就是对其进行别名,并可能通过引用传递它,这样你就不会复制它,例如:

$this_var = $this;
DB::transaction(function() use ($user_id, &$this_var as $controller) {
        $org = $this->create_org($user_id); //failing on this line with exception. btw $user is created fine
        $controller->create_contact($org->id);
        $controller->create_address($org->id);
});

我不完全确定语法是否完美,但逻辑是合理的。