Ошибка: Call to a member function on a non-object

  • 10 Ответов
  • 320 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

OnePrg

  • ***
  • 40
  • 0
Братья и сестры!

Смиренно прошу направить новичка на путь истинный.

Пытаюсь писать свою компоненту. Первые шаги прошли удачно: форма front-end открывается. Теперь нужно на форму добавить поля и тут ошибка

Call to a member function getLabel() on a non-object ..... components\com_drazs\views\application_add\tmpl\default.php on line 12

Файлики тута https://yadi.sk/d/CsCZiil5342LQj

Не могу разобраться с объектами, кто-что вызывает. Дайте ссылки почитать, чтобы ошибку исправить.
« Последнее редактирование: 19.12.2016, 17:57:32 от OnePrg »

*

Septdir

  • *******
  • 2139
  • 106
  • JoomlaZen
Re: Ошибка: Call to a member function on a non-object
« Ответ #1 : 19.12.2016, 14:54:22 »
Так дали бы сразу код 12 строки и смой функции
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen

*

OnePrg

  • ***
  • 40
  • 0
Re: Ошибка: Call to a member function on a non-object
« Ответ #2 : 19.12.2016, 17:24:37 »
Так дали бы сразу код 12 строки и смой функции

даю весь файл

<?php   
/** @var $this DrazsViewApplication_Add */
defined( '_JEXEC' ) or die; // No direct access
?>

<div class="item-page">
   <h1>Форма подачи заявки на приём</h1>
    
    <form action="<?php echo JRoute::_( 'index.php?view=application_add' )?>" method="post" class="form-validate">
 
        <div class="control-group form-inline">

ВОТ ТУТ ОШИБКА!           <div class="control-label"><?php echo $this->form->getLabel( 'name' ); ?></div>
            <div class="controls"><?php echo $this->form->getInput( 'name' ); ?></div>
        </div>
 
        <input type="hidden" name="task" value="form.save" />
        <input type="submit" value="Отправить" />
        <?php echo JHtml::_( 'form.token' ); ?>
    </form>
    
</div>
« Последнее редактирование: 19.12.2016, 17:55:44 от OnePrg »

*

OnePrg

  • ***
  • 40
  • 0
Re: Ошибка: Call to a member function on a non-object
« Ответ #3 : 19.12.2016, 17:26:16 »
Менял

<div class="control-label"><?php echo $this->form->getLabel( 'name' ); ?></div>

на

<div class="control-label"><?php echo $this->application_add->getLabel( 'name' ); ?></div>


- не помогло
« Последнее редактирование: 19.12.2016, 17:56:07 от OnePrg »

*

Septdir

  • *******
  • 2139
  • 106
  • JoomlaZen
Re: Ошибка: Call to a member function on a non-object
« Ответ #4 : 19.12.2016, 18:06:56 »
Ну все просто он не может получить занчение name label а точнее его просто нет, а нулевое там не сделали, ну или в XML забыл label написать. обратисеь к создателю комопнета пусть подправить. чистый баг
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen

*

OnePrg

  • ***
  • 40
  • 0
Re: Ошибка: Call to a member function on a non-object
« Ответ #5 : 19.12.2016, 18:12:56 »
В файле

com_drazs\models\forms\application_add.xml прописано

<?xml version="1.0" ?>
<form>
    <fieldset>
        <field name="name" type="text" label="Имя:" class="span3" required="true" />
    </fieldset>
</form>


*

robert

  • ********
  • 4002
  • 371
Re: Ошибка: Call to a member function on a non-object
« Ответ #6 : 19.12.2016, 19:35:37 »
Ну все просто он не может получить занчение name label а точнее его просто нет, а нулевое там не сделали, ну или в XML забыл label написать. обратисеь к создателю комопнета пусть подправить. чистый баг
Да нет, в таком случае вернуло бы просто пустую строку.
OnePrg, объект $this->form у вас либо не определен, либо не экземпляр JForm. Сделайте print_r($this->form); и посмотрите, что выводит.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Septdir

  • *******
  • 2139
  • 106
  • JoomlaZen
Re: Ошибка: Call to a member function on a non-object
« Ответ #7 : 19.12.2016, 19:39:57 »
Да нет, в таком случае вернуло бы просто пустую строку.
Даже как-то не подумал увидел non-object  и мышенально среагировал.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
________
Мои Контакты | JoomlaZen

*

OnePrg

  • ***
  • 40
  • 0
Re: Ошибка: Call to a member function on a non-object
« Ответ #8 : 20.12.2016, 11:30:44 »
OnePrg, объект $this->form у вас либо не определен, либо не экземпляр JForm. Сделайте print_r($this->form); и посмотрите, что выводит.

ничего не выводит

Как я понимаю последовательность операций:
1. drazs.php - точка входа
2. controller.php - контролер по умолчанию
3. views/appliations_add/view.html.php - вызываемый им вид
4. models/appliations_add.php - вызываемая модель   
5. views\application_add\tmpl\default.php - сама форма

правильно?

я правильно понимаю, что мой объект должен определяться в п.3?

   public function display( $tpl = null )
   {
      
      $this->item = $this->get( 'Item' );
      $this->form = $this->get( 'application_add' );
      $this->state = $this->get( 'State' );
      DrazsSiteHelper::setDocument( 'view title');
      print_r($form);   ВОТ ТУТ ВЫДАЁТ ПУСТО - НИЧЕГО НЕ ПИШЕТ
      parent::display( $tpl );
   }


А если делаю print_r($this);, то выдаёт вот что:

Спойлер
[свернуть]

*

robert

  • ********
  • 4002
  • 371
Re: Ошибка: Call to a member function on a non-object
« Ответ #9 : 20.12.2016, 11:37:50 »
      $this->form = $this->get( 'application_add' );
Покажите код модели.
      print_r($form);   ВОТ ТУТ ВЫДАЁТ ПУСТО - НИЧЕГО НЕ ПИШЕТ
$form откуда взялась?
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

OnePrg

  • ***
  • 40
  • 0
Re: Ошибка: Call to a member function on a non-object
« Ответ #10 : 20.12.2016, 12:04:43 »
Разобрался :)

   public function display( $tpl = null )
   {
     
      $this->item = $this->get( 'Item' );
      $this->form = $this->get( 'application_add' ); ВОТ ТУТ ОШИБКА; нужно $this->get( 'form' )
      $this->state = $this->get( 'State' );
      DrazsSiteHelper::setDocument( 'view title');
      print_r($form);   
      parent::display( $tpl );
   }


Всем спасибо!