2017-12-21 20 views
1

私はPHPでクラインルーターを実装していますが、少し問題があります... 私のコントローラから特別な関数を呼び出して、$ request変数このように:捕捉されないInvalidArgumentExceptionを::PHPクラインルーターコール特別コントローラ関数

$klein->respond('GET', '/[i:id]?', HomeController::view($request)); 

しかし、私はエラーを持っている呼び出し可能と予想されます。

$klein->respond('GET', '/[i:id]?', new HomeController::view($request)); 

、今エラーはこの1つである::だから私は自分のコードを変更しuncallable NULL を手に入れた構文エラー、予期しない 'ビュー'(T_STRING)、変数が想定(T_VARIABLE)または '$' は最後に、私はこのように私のコードを足す解決策が見つかりました:これは1が動作しているが、私は、私は何かが欠けてる感じ

$klein->respond('GET', '/[i:id]?', function($request){ HomeController::view($request); }); 

...私はこれを因数分解したいと思いますが、どんな解決策はありますか?あなたの第三の例では、我々は閉鎖、または匿名関数、またはラムダを渡す、または任意の他、あなたがしたいているように、クラインの例では

$klein->respond('GET', '/[i:id]?', array('HomeController','view')); 

: おかげであなた

+0

私は決してクラインを使用しませんでした: 'public static method view($ request){...}'を持つ* HomeController *というクラスがありますか? –

+0

はい、私は残念ですが、おそらく私はプラグインの作者に直接質問する必要があります...実際には私の質問は 'それを分解することは可能です'なので、私はそれを働かせる方法を見つけました... –

答えて

0

はこれを試してみてくださいあれを呼べ。とにかく、インラインで宣言しているため、パラメータを指定する必要があります。

一方、HomeController::viewの引数は、それ自身の宣言で指定されています。最初の例と2番目の例のように引数をインラインに置くと、実際にはその行で関数viewが呼び出されます。後で呼び出すために関数を$kleinに渡したいと思っています。これは上の例で行うべきことです。

Kleinのrespond関数は、PHPが呼び出し可能と呼ぶものを取ります。これはPHPで呼び出し可能を指定するには、百万通りの方法がありますが判明:

http://php.net/manual/en/language.types.callable.php

私はあなたが$klein->respond('GET', '/[i:id]?', HomeController::view);を行うことができます考えていたが、それが正しいことが表示されません。 Pythonでは動作しますが、PHPでは動作しません。しかたがない。それはもう少しコンパクトにする

$klein->respond('GET', '/[i:id]?', ['HomeController','view']); 

:あなたはPHP 5.4以降を使用している場合

、あなたは短い配列構文を使用することができます。

+0

これは、私はそれを完全に探していた、ありがとう! –

+0

あなたは大歓迎です。どういたしまして! – eimajenthat

関連する問題