Использование $this вне контекста объекта в Yii

Я получаю сообщение об ошибке, например Fatal error: Using $this when not in object context in ..\controllers\ServiceRequestController.php on line 661, при вызове файла представления с помощью действия контроллера из расширения EasyTabs.
Я вызываю действие контроллера, подобное этому, в файле представления
ServiceRequestController::actionTest();
и в контроллере

     public static function actionTest()  
   {
        $this->redirect('test');
    }

Как я могу избавиться от этой ошибки?? Когда я погуглил, я обнаружил, что $this cannot be used in a static method. . Поэтому я попытался использовать
$model = new ServiceRequest(); $model->Test(); в моем файле представления. Но он показывает ошибку как ServiceRequest and its behaviors do not have a method or closure named "actionTest". Может ли кто-нибудь помочь мне исправить ошибку? Заранее спасибо, пытался исправить по этой ссылке. Но я думаю, что ошибаюсь. Неустранимая ошибка PHP: использование $this вне контекста объекта


person anu    schedule 02.05.2013    source источник


Ответы (4)


Не используйте ключевое слово static при определении действия.

Подробнее о статических методах и свойствах можно прочитать здесь:

http://de1.php.net/manual/en/language.oop5.static.php< /а>

person Michael Härtl    schedule 02.05.2013

попробуй это

   self::actionTest();

вместо

   ServiceRequestController::actionTest();
person Muhammad Shahzad    schedule 29.12.2013

При использовании ключевого слова $this объект должен быть создан в какой-то момент. Если у вас есть класс:

class Example {

    private $word = 'hello';

    public static function hello() {
        echo 'I can be called by writing:';
        echo 'Example::yo()';
    }

    public function world() {
        echo 'If this class has been instantiated, ( new Example; )';
        echo '$this->word will be hello';
        echo 'If this class hasn't been instantiated, you will get your error';
    }
}

Конкретный экземпляр класса может называться $this из методов, находящихся внутри него.

Вы можете написать:

$example1 = new Example;
$example2 = new Example;
$example3 = new Example;

Внутри $example1 $this будет ссылаться на то же самое, на что $example1 ссылается снаружи. Таким образом, вы можете изменить $word $example1 следующим образом:

$example1->word = 'yo';    // from outside of the class
$this->word = 'yo';        // from inside of the class

Однако до того, как вы создадите экземпляр класса с новым ключевым словом, $this еще не существует. Класс — это план, и вы создаете из него объекты, используя ключевое слово new, на которое затем можно ссылаться изнутри как на $this.

person JPR    schedule 02.05.2013
comment
как я могу реализовать это в этом сценарии? - person anu; 02.05.2013

Я исправил эту ошибку для yii2, исправив свой URL, например.

 http://localhost/e-compare2/backend/web/index.php?r=crud/make
person iltaf khalid    schedule 02.12.2014