0

私はlaravelを初めて使用し、数日前にプロジェクトを開始しました。gitなしでcomposerを実行したところ、「問題なく」動作しました。昨日、パッケージをインストールしようとしましたfelixkiss/uniquewith-validatorが、問題なくインストールできましたが、新しいオプションは実装されていませんでした。composer を完全に更新した後、アプリケーション全体が機能しなくなり、メソッドredirectIfTrailingSlash()が未定義であることを示すエラーが発生しました。しかし、これはあくまでも「前話」であり、以降にとって重要かどうかはわかりません。

いくつかのガイドをもう一度読んだ後、間違ったlaravelパッケージを使用していることに突然気付きました! laravel/framework正しいパッケージの代わりに使用しましたlaravel/laravel。この時点で、壊れたアプリケーションをバックアップし、composer を使用して適切なパッケージをインストールすることにしました。git を使用しないと常に多くの頭痛の種になり、git もインストールすることにしました。laravel/frameworkそのため、依存関係からパッケージを削除して追加しましlaravel/laravelた。

驚いたことに、すべてがうまく機能し、私のファイルも問題ありませんでしたが、問題はすべてのコントローラーが壊れていたことだけです。エラーが発生しています:

コントローラ メソッドが見つかりません。

私は試した:

  • composer dump-autoload
  • composer update
  • php artisan dump-autoload(Artisan は新しいパッケージでインストールされたばかりです)

アップデート:

さらに調査した結果、問題は古いコントローラーに直接あるのではなく、エラーをスローする親メソッドの呼び出しにあります。これは私の CalendarController です:

class CalendarController extends BaseController {

    protected $layout = 'layouts.master';

    public function __construct()
    {
        //this is a method of BaseController, if I comment out the line, it works fine
        $this->getDays();
    }

    public function init()
    {
        $this->layout->title = 'Start';
        $this->layout->key = 'calendar';
        usort($this->viewData['days'],array($this,'sortDays'));
        $this->getCalendarView();
    }

    private function sortDays($a,$b)
    {
        return $a->teaser_index > $b->teaser_index;
    }

    private function getCalendarView()
    {
        $this->layout->content = View::make('layouts.calendar', $this->viewData);
    }
} 

しかし、メソッド内のすべてをコメントアウトしてもgetDays()、エラーがスローされるため、何らかの理由で親メソッドを呼び出すことができなくなります。

別の更新

getDays()メソッドをメソッドに置き換えましたhello()。これはベースコントローラーです (getDays()当分の間削除されます):

class BaseController extends Controller {

    var $viewData = array();


    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */


    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }

    public function hello()
    {
        return 'hello';
    }

}   

これは現在のコントローラーです (hello()現在init()、ルートを通じて呼び出されるメソッドにあります):

class CalendarController extends BaseController {

    protected $layout = 'layouts.master';

    public function __construct()
    {
        //this is a method of BaseController, if I comment out the line, it works fine
        //$this->getDays();
    }

    public function init()
    {

        $this->layout->title = 'Start';
        $this->layout->key = 'calendar';
        //usort($this->viewData['days'],array($this,'sortDays'));
        //$this->getCalendarView();
        echo $this->hello();
    }

    private function sortDays($a,$b)
    {
        return $a->teaser_index > $b->teaser_index;
    }

    private function getCalendarView()
    {
        $this->layout->content = View::make('layouts.calendar', $this->viewData);
    }
}
4

0 に答える 0