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

Dram

  • Захожу иногда
  • 211
  • 0 / 0
Есть сайт на Joomla 3.10 под нее написан самописный компонент (не мной). Есть желание перейти с php 7.4 на 8.2. Взял тестовый серв, перенес сайт. На фронте вроде без ошибок, все работает. Сайм функционал Joomla версии  3.10 тоже стабильно пашет под PHP 8.2, но вот с самописным компонентом есть ошибки. Некоторые смог исправить сам, а для других не хватает знаний, прошу помочь.

Первая ошибка - при попытки сохранить материал получаю ошибку

Я так понимаю в конструктор класса Тайбл приходит 1 значение, а нужно три. Вот конструктор родного класса

Я предполагаю, что проблема в модели (конкретно в конструкторе) самописного компонента (но возможно ошибаюсь). Логика такая - раз сохранение и редактирование родных материалов джумлы работает. Значит дело не в классе ядра, а в самописе.

Как это выяснить?

P.S. я проверил - в главный контструктор все три значения приходят и мне не понятно чего он ругается что пришло одно вместо трех

328 строка это уже не конструктор
*

sivers

  • Живу я здесь
  • 2494
  • 339 / 0
Re: Ошибки при переходе на PHP 8.2
« Ответ #1 : 30.12.2022, 10:39:10 »
1 аргумент в функции должен быть
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Dram

  • Захожу иногда
  • 211
  • 0 / 0
Re: Ошибки при переходе на PHP 8.2
« Ответ #2 : 30.12.2022, 10:43:43 »
1 аргумент в функции должен быть

Простите, ничего не понял - в какой функции один аргумент? Все таки нужно менять ядро? Я что-то нутром чую что дело в самописном компоненте.
*

sivers

  • Живу я здесь
  • 2494
  • 339 / 0
Re: Ошибки при переходе на PHP 8.2
« Ответ #3 : 30.12.2022, 10:52:54 »
Код
return new $tableClass($db);
вот тут передается один аргумент конструктору (в скобках), при этом
Код
public function __construct($table, $key, $db)
вызываемый конструктор ожидает 3 аргумента

соответственно, либо передавать надо 3, либо в конструкторе сделать прием  только 1 аргумента (возможно, придется и сам конструктор немного переделать в этом случае)
менять лучше в той части, которая относится к самописному компоненту, а не в ядре Joomla.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Dram

  • Захожу иногда
  • 211
  • 0 / 0
Re: Ошибки при переходе на PHP 8.2
« Ответ #4 : 30.12.2022, 12:39:14 »
вызываемый конструктор ожидает 3 аргумента
Так это один и тот же файл - стандартный класс Joomla 3, можете сами его посмотреть по пути /libraries/src/Table/Table.php

разве могли они сами так накосячить?
А конструктор сапомиса наследуется вообще без параметров
Код
	function __construct()
{
parent::__construct();

        $this->dir = JPATH_ROOT.'/images/vuz';
$array = JRequest::getVar('cid',  0, '', 'array');
$this->setId((int)$array[0]);
}
« Последнее редактирование: 30.12.2022, 12:47:12 от Dram »
*

sivers

  • Живу я здесь
  • 2494
  • 339 / 0
Re: Ошибки при переходе на PHP 8.2
« Ответ #5 : 30.12.2022, 12:47:22 »
Тогда ищите в кастомном компоненте неправильно использование тех методов. Начните с файлов компонента, перечисленных в сообщении об ошибке.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Dram

  • Захожу иногда
  • 211
  • 0 / 0
Re: Ошибки при переходе на PHP 8.2
« Ответ #6 : 30.12.2022, 13:44:32 »
Я нашел строку, дальше которой запрос не идет.
Цитировать
$row =& $this->getTable();
Убирание апмеданса проблему не решает. Это строка в методе store() который как раз сохраняет данные в админке.
Этот метод в классе самописаного компонента
Код
<?php

defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.model');

class VuzModelItem extends JModelLegacy
{
    var $dir = null;

function __construct()
{
parent::__construct();

        $this->dir = JPATH_ROOT.'/images/vuz';
$array = JRequest::getVar('cid',  0, '', 'array');
$this->setId((int)$array[0]);
}

...................

function store()
{
$row =& $this->getTable();
$data = JRequest::get('post');

$fields = JRequest::getVar('fields', '', 'post', 'array', JREQUEST_ALLOWRAW);
        $statistics = JRequest::getVar('statistics', '', 'post', 'array', JREQUEST_ALLOWRAW);
$data['text'] = JRequest::getVar('text', '', 'post', 'string', JREQUEST_ALLOWRAW);

if(empty($data['name']))
{

.......................

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Сохранить не удалось из-за ошибки: Содержимое превышает допустимые лимиты

Автор R31rus

Ответов: 21
Просмотров: 3779
Последний ответ 27.03.2024, 16:46:13
от Gorilla
jos-Error: Материал не найден вместо 404 ошибки

Автор bugmenot

Ответов: 4
Просмотров: 981
Последний ответ 10.01.2023, 11:32:11
от Mick_20
Ошибка при переходе на PHP 8

Автор KingSnake

Ответов: 1
Просмотров: 555
Последний ответ 27.12.2022, 10:35:38
от NewUsers
Сохранение авторизации пользователя при переходе на поддомен

Автор denism300

Ответов: 2
Просмотров: 435
Последний ответ 14.11.2022, 11:35:14
от denism300
Ошибки при загрузке страниц сайта

Автор web_signal

Ответов: 3
Просмотров: 463
Последний ответ 08.11.2022, 20:26:13
от marksetter