tbaddade / redaxo_url

REDAXO 5 AddOn zur URL-Generierung für eigene AddOns (ehemals Url Control, ehemals Frau Schultze)
MIT License
46 stars 22 forks source link

Call to a member function `getFullUrl()` on null #261

Closed alxndr-w closed 1 year ago

alxndr-w commented 1 year ago

Beim Versuch, doch noch das Addon yform_usability und URL zu verheiraten:

Error: Call to a member function getFullUrl() on null File: redaxo/src/addons/url/lib/Url/Profile.php Line: 301

Stacktrace | Function | File | Line | | ------------------------------------------- | --------------------------------------------- | -------- | | Url\Profile->createAndSaveUrls | redaxo/src/addons/url/lib/Url/Profile.php | 276 | | Url\Profile->buildUrls | redaxo/src/addons/yform_usability/lib/Api.php | 55 | | rex_api_yform_usability_api->__changestatus | redaxo/src/addons/yform_usability/lib/Api.php | 28 | | rex_api_yform_usability_api->execute | redaxo/src/core/lib/api_function.php | 179 | | rex_api_function::handleCall | redaxo/src/addons/yform_usability/boot.php | 24 | | require | redaxo/src/core/lib/packages/package.php | 280 | | rex_package->includeFile | redaxo/src/core/lib/packages/package.php | 427 | | rex_package->boot | redaxo/src/core/packages.php | 27 | | {closure} | redaxo/src/core/lib/util/timer.php | 57 | | rex_timer::measure | redaxo/src/core/packages.php | 28 | | {closure} | redaxo/src/core/lib/util/timer.php | 57 | | rex_timer::measure | redaxo/src/core/packages.php | 30 | | include_once | redaxo/src/core/frontend.php | 16 | | require | redaxo/src/core/boot.php | 143 | | require | index.php | 9 |
System report (REDAXO 5.14.1, PHP 7.4.32, MySQL 5.7.40) | REDAXO | | | ------------: | :--------- | | Version | 5.14.1 | | PHP | | | ------------: | :--------- | | Version | 7.4.32 | | OPcache | no | | Xdebug | no | | Database | | | ------------: | :----------- | | Version | MySQL 5.7.40 | | Character set | utf8mb4 | | Server | | | ------------: | :--------- | | OS | Linux | | SAPI | cgi-fcgi | | Webserver | Apache | | Request | | | ------------: | :--------------- | | Browser | Chrome/107.0.0.0 | | Protocol | HTTP/2.0 | | HTTPS | yes | | Packages | | | --------------------------------: | :----------- | | accessdenied | 2.0.1 | | across | 4.0.0-dev1 | | adminer | 1.9.2 | | backup | 2.8.2 | | be_password | 2.0.1 | | be_style | 3.1.0 | | be_style/customizer | 3.1.0 | | be_style/redaxo | 3.1.0 | | be_style_fluent | 4.0.0 | | be_tools | 1.7.6 | | bloecks | 3.1.1 | | bloecks/cutncopy | 3.1.1 | | cache_warmup | 4.0.0 | | cke5 | 5.2.0 | | consent_manager | 3.0.8 | | cronjob | 2.9.0 | | cropper | 1.3.0 | | developer | 3.9.1 | | email_templates | 1.0.0-beta-1 | | feeds | 3.3.1 | | focuspoint | 4.0.2 | | global_settings | 2.8.1 | | icecoder | 3.0.1 | | install | 2.10.0 | | maintenance | 2.8.5 | | markitup | 3.7.3 | | markitup/documentation | 1.1.0 | | mblock | 3.4.7 | | media_manager | 2.13.0 | | media_manager_responsive | 1.1.0-dev | | mediapool | 2.12.0 | | metainfo | 2.9.0 | | mform | 7.2.2 | | mform/docs | 1.1 | | minify | 2.2 | | phpmailer | 2.11.2 | | project | dev | | project_manager | 1.4.0 | | project_manager/client | 1.1.0 | | qanda | 2.0.11 | | quick_navigation | 6.0.0 | | redactor2 | 4.2.1 | | search_it | 6.9.5 | | search_it/documentation | 6.9.5 | | speed_up | 1.3.1 | | sprog | 1.4.0 | | statistics | 2.2.1 | | structure | 2.14.1 | | structure/content | 2.14.1 | | structure/history | 2.14.1 | | structure_tweaks | 1.4.0 | | theme | 1.3.3 | | ui_tools | 1.2.2 | | ui_tools/bootstrap-datetimepicker | 4.17.47 | | ui_tools/jquery-minicolors | 2.4.0 | | ui_tools/selectize | 0.2.0 | | uploader | 2.3.0 | | url | 2.0.2 | | usage_check | 2.3 | | users | 2.9.0 | | watson | 2.3.0 | | xoutputfilter | 3.0.0-beta1 | | xoutputfilter/abbrev | 3.0.0 | | xoutputfilter/backend | 3.0.0 | | xoutputfilter/documentation | 1.0.0 | | xoutputfilter/frontend | 3.0.0 | | xoutputfilter/import_export | 3.0.0 | | ycom | 4.0.11 | | ycom/auth | 4.0.11 | | yform | 4.0.4 | | yform/email | 4.0.4 | | yform/manager | 4.0.4 | | yform/tools | 4.0.4 | | yform_spam_protection | 1.2.1 | | yform_usability | 2.0.5 | | yrewrite | 2.9.1 | | zip_install | 1.2 |

Anpassungen, die ich dazu in der API.php von yform_usability vorgenommen habe:


    private function __changestatus()
    {
        $status  = rex_post('status', 'integer', 1);
        $data_id = rex_post('data_id', 'integer', 76);
        $table   = rex_post('table', 'string', 'rex_yf_workshop');
        $sql     = rex_sql::factory();

//        $sql->setTable($table)->setValue('status', $status)->setWhere(['id' => $data_id]);
        try {
            rex_yform_manager_dataset::get($data_id, $table)->setValue('status', $status)->save();
        } catch (\rex_sql_exception $ex) {
            throw new rex_api_exception($ex->getMessage());
        }
        if (rex_addon::get('url')->isAvailable()) {

            $profiles = \Url\Profile::getAll();
            if ($profiles) {
                foreach ($profiles as $profile) {
                    $profile->deleteUrls();
                    $profile->buildUrls();
                }
            }

        }
        $modelClass = \rex_yform_manager_dataset::getModelClass($table);

        if ($modelClass) {
            rex_extension::registerPoint(
                new rex_extension_point(
                    'YFORM_DATA_STATUS_CHANGED',
                    null,
                    [
                        'data_id'  => $data_id,
                        'table'    => rex_yform_manager_table::get($table),
                        'data'     => $modelClass::get($data_id),
                        'old_data' => true,
                    ]
                )
            );
        }

        $tparams = \yform\usability\Utils::getStatusColumnParams(rex_yform_manager_table::get($table), $status);

        $tparams['element'] = strtr(
            $tparams['element'],
            [
                '{{ID}}'    => $data_id,
                '{{TABLE}}' => $table,
            ]
        );
        $this->response     = array_merge($this->response, $tparams);
    }

Mich wundert, dass getFullUrl() hier getRewriter() kein Ergebnis bekommt...

tbaddade commented 1 year ago

Url wird später geladen als das yform_usability AddOn.

alxndr-w commented 1 year ago

Immer noch? Wie kann das sein. Ich wundere mich, ich habe probeweise die package.yml geändert und URL als required gemacht. Dadurch dachte ich kann ich das ausschließen.

tbaddade commented 1 year ago

Immer noch?

Verstehe die Frage nicht.

Zur Ladereihenfolge

Heißt für mich, dass Url als letztes angehangen wird.

alxndr-w commented 1 year ago

Ich hatte, um herauszufinden, ob es ein Ladereihenfolge-Problem ist, versucht, in der package.yml von yform_usability die Abhängigkeit url probeweise einzutragen, auch ein load: late. Trotzdem führt das zu nichts, das URL-Addon bekommt die Änderung nicht mit.

Möglicherweise habe ich aber auch grundsätzlich nicht das Konzept der Extension Points verstanden. Ich dachte, da kann sich erst jedes Addon reinhängen und danach wird es ausgeführt.

tbaddade commented 1 year ago

Hast du mal probiert, anstelle des YFORM_DATA_STATUS_CHANGED den EP YFORM_DATA_UPDATED zu notieren. Dabei versuchen die Daten so zu übergeben, wie es YFORM selbst bei diesem EP macht.

Das if (rex_addon::get('url')->isAvailable()) { könnte dann m.E. gelöscht werden.

tbaddade commented 1 year ago

@alxndr-w Kann das Issue geschlossen werden?

alxndr-w commented 1 year ago

Ich hatte das versucht und erfolglos abgebrochen. Das Problem bleibt bestehen, ist aber m.E. keins von URL