0

私は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;
    }

..。

4

1 に答える 1

3

問題は、関数に$this提供しているクロージャー内で使用しているようです。ライブローカルで動作する理由はわかりませんが、コントローラーのインスタンスを関数にインポートして使用する必要があります.DB::transaction

混乱を避けるために、これを行う最善の方法は、次のようにエイリアスを作成し、参照によって渡すことで、コピーしないようにすることです。

$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);
});

構文が完璧かどうかは完全にはわかりませんが、ロジックは適切です。

于 2013-01-04T09:54:30.410 に答える