自分のモジュールを最新の Kohana (3.3) で動作するようにアップグレードしているときに、シナリオに誤動作が見つかりました。アプリでテンプレート駆動型スキーマを使用しています (私のコントローラーは Controller_Theme を拡張します)。しかし、AJAX 呼び出しの場合、バージョン 3.2 で使用した別の Controller は、単に Controller を拡張します。Rquest オブジェクトで POST または GET を介して渡された変数にアクセスするには、このコントローラーで Request オブジェクトをインスタンス化する必要がありました。私は __construct() メソッドでそれを行いました:
class Controller_Ajax extends Controller {
public function __construct()
{
$this->request = Request::current();
}
public function action_myaction()
{
if($this->is_ajax())
{
$url = $this->request->post('url');
$text = $this->request->post('text');
}
}
}
myaction() メソッドでは、このように投稿された変数にアクセスできます。しかし、これは Kohana 3.3 では機能しなくなりました。私はいつもこのエラーを受け取ります:
ErrorException [ Fatal Error ]: Call to a member function action() on a non-object
SYSPATH/classes/Kohana/Controller.php [ 73 ]
68 {
69 // Execute the "before action" method
70 $this->before();
71
72 // Determine the action to use
73 $action = 'action_'.$this->request->action();
74
75 // If the action doesn't exist, it's a 404
76 if ( ! method_exists($this, $action))
77 {
78 throw HTTP_Exception::factory(404,
ルートが正しく設定されていると確信しています。Request オブジェクトに関して、3.2 から 3.3 への移行ドキュメントに変更はありませんでした。それとも私は何かを逃しましたか?