Почему просиходит системная ошибка при создании класса наследованного из абстракного? Имеется плагин для Wordpress. При запуске плагина, все работает, пока не происходит инициализация класса:$this->_registry['settings'] = new Tools\Settings();
Проблема в том, при создании данного класса, выбивает 500 ошибку. Я подозреваю, что у меня проблема с пространством имен, но до конца понять не могу.
Хотелось бы услышать мнения экспертов.
Файловая структура плагинаmegaforms/
├── admin
├── public
│ └── index.php
├── README.md
├── readme.txt
├── megaforms.php
├── uninstall.php
└── vendor
├── api
├── controller
│ └── Controller.php
├── core
│ ├── I18n.php
│ ├── Loader
│ │ ├── AbstractLoader.php
│ │ └── LoaderInterface.php
│ ├── Registry.php
│ ├── Router.php
│ └── Templater.php
├── db
│ ├── Connector.php
│ ├── interfaces
│ │ ├── BaseActiveRecordInterface.php
│ │ ├── ConnectorInterface.php
│ │ └── QueryInterface.php
│ ├── Migration.php
│ ├── QueryBase.php
│ └── Settings.php
├── languages
│ ├── en_EN.mo
│ ├── readme.txt
│ └── ru_RU.mo
├── MegaformsInit.php
├── model
├── Plugin.php
├── templates
│ └── default
│ ├── footer.php
│ └── header.php
└── tools
├── Helpers.php
├── PluginChecker.php
└── Settings.php
Вот класс Tools\Settings();menu_slug_exists($menu_slug))
return false;
$this->_settings[$menu_slug]['page_title'] = $page_title;
$this->_settings[$menu_slug]['menu_title'] = $menu_title;
$this->_settings[$menu_slug]['capabilities'] = $capabilities;
$this->_settings[$menu_slug]['menu_slug'] = $menu_slug;
$this->_settings[$menu_slug]['function'] = $function;
$this->_settings[$menu_slug]['icon_url'] = $icon_url;
$this->_settings[$menu_slug]['position'] = $position > 0 ? $position : $this->_position;
return count($this->_settings[$menu_slug]);
}
public function add_submenu_page($parent_slug, $page_title, $menu_title, $capabilities, $menu_slug, $function = '')
{
if($this->menu_slug_exists($parent_slug) === false)
return false;
$this->_settings[$parent_slug]['parent_slug'] = $parent_slug;
$this->_settings[$parent_slug]['page_title'] = $page_title;
$this->_settings[$parent_slug]['menu_title'] = $menu_title;
$this->_settings[$parent_slug]['capabilities'] = $capabilities;
$this->_settings[$parent_slug]['menu_slug'] = $menu_slug;
$this->_settings[$parent_slug]['function'] = $function;
return count($this->_settings[$parent_slug]);
}
public function remove_menu_page($menu_slug)
{
if($this->menu_slug_exists($menu_slug,$menu_slug)){
if(count($this->_settings[$menu_slug]) > 1 )
return false;
unset($this->_settings[$menu_slug]);
return true;
}
return false;
}
public function remove_submenu_page($menu_slug, $parent_menu_slug)
{
if($this->menu_slug_exists($parent_menu_slug,$menu_slug)){
foreach($this->_settings[$parent_menu_slug] as $submenu_page){
if(array_key_exists($menu_slug,$submenu_page)){
unset($submenu_page);
return true;
}
}
}
return false;
}
public function add_plugin_action_link($link)
{
if($this->action_link_exists($link))
return false;
$this->_action_links[] = $link;
return count($this->_action_links);
}
public function remove_plugin_action_link($link)
{
if($this->action_link_exists($link))
return false;
$key = array_search($link,$this->_action_links);
unset($this->_action_links[$key]);
return true;
}
public function menu_slug_exists($menu_slug,$submenu_slug = '')
{
if(array_key_exists($menu_slug,$this->_settings)){
if(strlen(Helpers::rltrim($submenu_slug)) > 0){
foreach($this->_settings[$menu_slug] as $submenu_page){
if(array_key_exists($submenu_slug,$submenu_page))
return true;
}
return false;
}
return true;
}
return false;
}
public function action_link_exists($link)
{
return in_array($link,$this->_action_links);
}
}
?> Вот класс Vendor\Core\Loader\AbstractLoader $hook,
'component' => $component,
'callback' => $callback,
'priority' => $priority,
'accepted_args' => $accepted_args,
];
return $hooks;
}
public function add_action($hook, $component, $callback, $priority = 10,$accepted_args = 1){
$this->_actions = $this->add($this->_actions, $hook, $component, $callback, $priority,$accepted_args);
}
public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) {
$this->_filters = $this->add( $this->_filters, $hook, $component, $callback, $priority, $accepted_args );
}
public function run_filters(){
foreach($this->_filters as $filter){
add_filter($filter['hook'],[$filter['component'], $filter['callback']], $filter['priority'], $filter['accepted_args']);
}
}
public function run_actions(){
foreach($this->_actions as $action){
add_action($action['action'], [$action['component'], $action['callback']], $action['priority'], $action['accepted_args']);
}
}
}
?> Вот интерфейс Vendor\Core\Loader\LoaderInterface

21 Авг 2019 в 07:05
185 +1
0
Ответы
1

Проблема с вашим кодом может быть связана с пространством имен.

В вашем классе Tools\Settings, вы указываете пространство имен namespace Vendor\Tools;, однако в вашем файловой структуре плагина и классов, везде у вас используется Vendor вместо Tools.

Вы можете либо изменить пространство имен в вашем классе Tools\Settings на namespace Vendor\Tools;, или изменить структуру папок вашего плагина, чтобы соответствовать указанному пространству имен в классе.

Также, убедитесь, что файлы автозагрузки и главный файл вашего плагина правильно настроены для корректной загрузки классов из указанных папок.

Попробуйте внести эти изменения и запустить плагин снова, чтобы увидеть, что ошибка исчезнет.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 340 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир