0

Laravel 4 で小さな REST API を構築しています。アプリケーションで HMVC スキームを使用しています。問題は、API のコントローラーを呼び出そうとすると、PHP がクラスをインスタンス化できないと言うことです。

Target [App\Modules\ChunkletAPI\v1\ServerController] is not instantiable.

v1/controllers のクラス自体は次のとおりです。

<?php namespace App\Modules\ChunkletAPI\v1;

class ServerController extends ChunkletAPI {}

継承するもの

<?php namespace App\Modules\ChunkletAPI\v1;

use Controller;

abstract class ChunkletAPI extends Controller {

    protected $name;

    protected function __construct() {
        $this->name = '\Model\ ' . str_replace('Controller', '', get_class($this));
    }

    public function index() {
        $n = $this->name;
        return $n::all();
    }
}

ルーティングは次の方法で行われます。

<?php namespace App\Modules\ChunkletAPI;

use \Illuminate\Support\Facades\Route;

Route::group(array('prefix' => 'api/v1'), function()
{
    Route::resource('server', 'App\Modules\ChunkletAPI\v1\ServerController');
});

何が起こっているのかわかりません-遊んでみたり、親クラスを非抽象化するなどしてみました-Googleは役に立ちません。何か案は?

4

1 に答える 1

3

理由がわかった。ChunkletAPI->__construct()として設定する必要がありましたがpublic、保護されていません。それ以外の場合、Laravel には静的クラスのように見えます。

于 2013-09-15T17:55:36.133 に答える