Проблем с клас и рутиране

Pok4

Registered
Хора, имам един проблем с Argos CMS и по-точно с новия екстеншън, който съм решил да напиша. Той е вече готов (но почти). Останаха Ajax заявките да проработят, но не в отделни файлове, а в контролерите (както искам аз)

Тъй като не ползвам готово решение, а част от фреймуърк, който не е писан от мен, ще дам и код.

Проблема е, че самите екстеншъни се лоудват от бейсконтролера, а именно в __constructor метода.

Там се инклудва файл с клас, а класа е самия екстеншън, ето пример:


Код:
<?php
namespace App\Controllers;

class BaseController {

  public function __construct() {
     require_once...(ext.php);

  }
};

И така, а самия екстеншън е прост клас, пример:
Код:
class the_tickets extends \App\Controllers\BaseController  {
     
  public function __construct() { 
    parent::__construct(); 
  }
  
  public function ajax() {
       echo 1;
       die();
  }
  
     
};
$load_ext = new the_tickets;
$load_ext->load();

До тук добре, функциите на екстеншъна работят, аз съм дал само малко код от него, но вътре има load функцията и т.н.
Аз искам с рутиране да достъпя този клас който е в __construct метода в бейс контролера. Както виждате това е класа с име the_tickets.
С class_exist проверих дали класа го има там в бейсконтролера и го има, но рутирането не го открива.

Рутирането е такова:
Код:
'_controller' => 'App\Controllers\BaseController::__construct::the_tickets::ajax',
Достъпвам файла, но ми вади бяла страница и не вади въпросното '1' като число, което съм задал горе и след него има die().
По принцип темплейт файла е празен и нарочно е такъв, тъй като там ще се изважда Output-a от аякс рекуеста. Това въобще не го коментираме. Аз просто искам да направя така, че контролера да вика този клас от конструкшън метода на бейс контролера.
Цял ден се мъча, писах на няколко места, но никой не ми отговаря :D

Ако го направя така:
Код:
'_controller' => 'App\Controllers\BaseController::__construct',

работи..

Другите подобни рутирания също работят, ето примери:
Код:
'_controller' => 'App\Controllers\Ajax\Chat_Reloader::Chat_Reloader',
'_controller' => 'App\Controllers\OneSignal_User::OneSignal_User',

Държа да отбележа, че по-горе има повече пъти :: работи като достъп от клас до метод, но пък аз искам да го ползвам с повече от 1 (демек 3), което може да е някакъв проблем с рутиращия клас и въобще да не работи. Вие как мислите ?

Знам, че това което искам да направя е brainfuck и въобше не знам дали е и възможно, просто съм се хванал на хорото да ъпдейтвам и да надграждам системата и искам да видя, дали вие ще намерите решение на моя проблем.
 
току що получих отговор:

You simply cannot map multiple methods as controller.

When you create a Router, you want to map One Url to One controller.
In this library, you cannot map multiple methods on one route.

от създателя и както и си помислих, това е заради това, че не може да се достъпва повече от 1 метод...
 
От години не съм писал php и малко се изненадах, че е легално да дефинираш клас във функция.
Защо не заредиш наследниците извън BaseController? Тогава ще можеш да си посочиш в рутера ajax само с едно "::".
 
Аз вече се оправих. Системата работи така, тъй като има модули към нея, наричат се екстеншъни и се изкл./вкл. от бутони в админ панела.
Ако ги изведа извън контролера спират да работят. Не съм писал из основи всичко и както е направено така работи :)
 

Back
Горе