Создание запроса в контроллере в Kohana 3.3
При обновлении моего собственного модуля для работы с последней Kohana (3.3) я обнаружил сбой в моем сценарии. Я использую шаблонно-управляемую схему в своем приложении (Мои контроллеры расширяют Controller_Theme). Но для вызовов AJAX я использовал в версии 3.2 отдельный контроллер, который расширяет только контроллер. Мне пришлось создать экземпляр объекта Request в этом контроллере для доступа к передаваемым переменным через POST или GET в объекте Rquest. Я сделал это в методе __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,
Я уверен, что у меня правильно настроены маршруты. Я не нашел никаких изменений в документе миграции с 3.2 до 3.3 об объекте запроса. Или я что-то пропустил?
1 ответ
И запрос, и ответ инициализируются по умолчанию в Controller
класс (см. код ниже), поэтому не нужно переопределять его конструктор. Попробуйте удалить ваш конструктор, и если это не поможет, то ваша маршрутизация испорчена.
abstract class Kohana_Controller {
/**
* @var Request Request that created the controller
*/
public $request;
/**
* @var Response The response that will be returned from controller
*/
public $response;
/**
* Creates a new controller instance. Each controller must be constructed
* with the request object that created it.
*
* @param Request $request Request that created the controller
* @param Response $response The request's response
* @return void
*/
public function __construct(Request $request, Response $response)
{
// Assign the request to the controller
$this->request = $request;
// Assign a response to the controller
$this->response = $response;
}