Composer автозагрузка: класс не найден в производстве, локально работает - PullRequest
1 голос
/ 30 марта 2020

Я прочитал много веток о своей проблеме, но не могу найти правильное решение.

Я написал свой собственный плагин для WordPress и использовал для него composer. Локально это работает нормально, но когда я загружаю свой проект на мой веб-сервер, я получаю сообщение об ошибке о классе не найден.

MyOwnHooks не найден в /wp-content/plugins/my-own-hooks/myownhooks.php.

Каталог моего репозитория:

  • wp-content /
    • plugins /
      • my-own-hooks /
        • vendor /
        • inc /
          • php /
            • MyOwnHooks. php
            • GoogleContactsHelper. php
            • MyContact. php
            • MyPhoneNumber. php
      • myownhooks. php

/wp-content/plugins/my-own-hooks/myownhooks.php:

/**
 * Plugin Name: MyOwnHooks
 */
require_once ("vendor/autoload.php");

futur22\MyOwnHooksPlugin\MyOwnHooks::runner ();

/wp-content/-plugin/my-own-hooks/inc/php/MyOwnHooks.php:

<?php

namespace futur22\MyOwnHooksPlugin;

class MyOwnHooks {

    public function init() {
        \add_action ( 'wp_head', array (
                $this,
                'moh_incomplete_profile_script_code'
        ) );
    }

    public static function runner() {
        $pluginx = new MyOwnHooks ();
        $pluginx->init ();
    }

    public function moh_incomplete_profile_script_code() {
        // print something
    }
}

/wp-content/plugins/my-own-hooks/composer.json:

{
    "require" : {
        "rapidwebltd/php-google-people-api" : "^1.0"
    },
    "autoload" : {
        "psr-4" : {
            "futur22\\MyOwnHooksPlugin\\" : "inc/php"
        }
    }
}

Заблуждение, что он работает локально с XAMPP, но не в системе Linux. Каждый раз, когда я изменяю код и извлекаю его из репозитория, я удаляю composer .lock и каталог поставщика для запуска composer install.

XAMPP и рабочий сервер имеют PHP 7.3.x.

Что здесь не так?

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Спасибо за ваши вспомогательные комментарии.

Моя проблема устранена путем изменения файлов и деактивации общего кэша W3.

myownhooks.php:

<?php
/**
 * Plugin Name: MyOwnHooks
 */
require_once __DIR__ . "/vendor/autoload.php";

use futur22\MyOwnHooksPlugin\MyOwnHooks;

MyOwnHooks::runner ();
?>

Добавлен трейлинг sla sh до composer.json:

{
    "require" : {
        "rapidwebltd/php-google-people-api" : "^1.0"
    },
    "autoload" : {
        "psr-4" : {
            "futur22\\MyOwnHooksPlugin\\" : "inc/php/"
        }
    }
}

Я удалил vendor/ и composer.lock. Затем снова использовал composer install. Я также использовал composer dump-autoload просто чтобы быть уверенным. С тех пор мой сайт снова работает.

Спасибо.

1 голос
/ 30 марта 2020

Я думаю, что вы должны добавить «код использования»; использовать futur22 \ MyOwnHooksPlugin \ MyOwnHooks; но код должен быть сверху.

...