2017-01-22 19 views
0

これは数時間前から行われており、なぜ動作していないのかわからないようです。 SLIMを初めて使用し、ミドルウェアに初めて晒されました。私はスリムなウェブサイトに記載されているtutorialに従うことを試みていますが、仕事に就くことはできません。SLIMフレームワークでミドルウェアを使用するとエラーが発生する

私のブートストラップコード:

<?php 

    require '../vendor/autoload.php'; 

    $app = new Slim\Slim(); 


    $app->get('/test', function() { 

    echo 'Hello, World'; 
}); 

$mw = function ($request, $response, $next) { 
    $response->getBody()->write('BEFORE'); 
    $response = $next($request, $response); 
    $response->getBody()->write('AFTER'); 

    return $response; 
}; 


$app->add($mw); 
$app->run(); 

私はミドルウェアなしでちょうど私のスリムなURLを実行すると、それがうまく動作します。 http://mysite/testを実行すると、出力としてHello, Worldが得られます。私は何かが欠け

Catchable fatal error: Argument 1 passed to Slim\Slim::add() must be an instance of Slim\Middleware, instance of Closure given, called in /Applications/XAMPP/xamppfiles/htdocs/project/api/public/index.php on line 22 and defined in /Applications/XAMPP/xamppfiles/htdocs/academy/api/vendor/slim/slim/Slim/Slim.php on line 1267 

アム:私はミドルウェアのコードを追加するときしかし、私は次のエラーを取得するスリムなサイトに記載されましたか?ミドルウェアには他の設定が必要ですか?スリムなドキュメンテーションはそれほど役に立ちません。どんな助けもありがたい。

+0

それは動作しますか? – BizzyBob

+0

@BizzyBob申し訳ありませんが、それを削除することです。それは私だけの仕事にしようとしていましたが、私は最初に 'use($ app)'を使っていましたが、それでも動作しません。 – bos570

+0

この$ container = $ app-> getContainer(); $コンテナ["mw"] = $ mw; $ app-> add($ mw);私は '未定義のメソッドスリム\スリムへのコールを取得する:: getContainer()/Applications/XAMPP/xamppfiles/htdocs/academy/api/public/index.phpにライン21' –

答えて

4

Slim 2がインストールされているようです。Slim 2とSlim 3の構文も混在しています。 Slim 3をインストールするには、次のコマンドを発行します。

$ composer install slim/slim 

そして、次のようなコードを使用:あなたは `使用($アプリを)`削除する場合

<?php 

require "vendor/autoload.php"; 

$app = new \Slim\App; 

$mw = function ($request, $response, $next) { 
    $response->getBody()->write("BEFORE"); 
    $response = $next($request, $response); 
    $response->getBody()->write("AFTER"); 

    return $response; 
}; 

$app->add($mw); 

$app->get("/test", function ($request, $response) { 
    echo "Hello, World"; 
}); 

$app->run(); 
+0

ありがとうございます。私はちょうどスリムスケルトンを使ってプロジェクトを再開しました。感謝します。 – bos570

+0

あなたのスリムスケルトンプロジェクトで、カスタムミドルウェアクラスをプロジェクトに追加するにはどうすればいいですか? – bos570

+0

Slim docsで述べたのと同じ方法です。スケルトンでミドルウェアをファイルに追加します:https://github.com/tuupola/slim-api-skeleton/blob/master/config/middleware.php –

関連する問題