web-dev-qa-db-ja.com

未定義の関数の呼び出し:Laravel 5.1

以下のコントローラーに記述されているプラ​​イベート関数があります。

private function GetProjects($ProjectStatus) {
    return \App\Models\Project\Project_Model
            ::where('ProjectStatusID', $ProjectStatus)
            ->where('WhoCreatedTheProject', auth()->user()->UserID)->get();
}

以下はこのプライベート関数を使用しているアクションメソッドです。

public function ClientCancelledProjects() {
    $ProjectStatus = \App\Enumeration\Project\ProjectStatus::Cancelled;         
    $MyProjects = GetProjects($ProjectStatus);
    return view("Project.Client.MyProject", array("Projects" => $MyProjects));
}

以下はコントローラーの実行時に発生するエラーです。

未定義の関数App\Http\Controllers\Project\GetProjects()を呼び出します

なぜこれが起こっているのか誰かが知っていますか?コントローラーで何度も記述されているため、コードのいくつかの行を再利用しようとしています。

7
user5694966

同じコントローラー内の関数からコントローラー内の関数にアクセスするには、self::を使用します。

public function ClientCancelledProjects() {
    $ProjectStatus = \App\Enumeration\Project\ProjectStatus::Cancelled;         
    $MyProjects = self::GetProjects($ProjectStatus);
    return view("Project.Client.MyProject", array("Projects" => $MyProjects));
}

注:Self::(大文字)は、インストールされているphpのバージョンに応じて機能しますが、古いバージョンの場合は、self::が推奨されます。

詳細については、このリンクを確認してください: PHP-Self vs $ this

16
Tim Lewis

クラス内の関数はグローバル関数ではないため、そのように呼び出すことはできません。代わりに$this->GetProjects()を使用する必要があります。

6
aynber