За последние 24 часа нас посетили 30822 программиста и 1444 робота. Сейчас ищут 897 программистов ...

Ребята Ошибка пустой аргумент... Уже голову поломал...

Тема в разделе "PHP для новичков", создана пользователем askanim, 4 июн 2016.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Есть класс контроллера который подключает мои контроллеры...
    Вот собственно он
    PHP:
    1. <?php
    2. namespace System\Http\Controller;
    3.  
    4. class Controller
    5. {
    6.     protected $go;
    7.     protected $ControllerName;
    8.     protected $FunctionName;
    9.     public function __construct ($ControllerName, $FunctionName)
    10.     {
    11.         $this->ControllerName = $ControllerName;
    12.         $this->FunctionName = $FunctionName;
    13.     }
    14.     public function StartRun ($parameters) {
    15.         $controller = 'App\\Controllers\\'.$this->ControllerName;
    16.  
    17.         $controllerObject = new $controller();
    18.         // Но какого - то фига с этой конструкцией мне выдаются ошибки...
    19.         // То есть у меня всё выполняется но и ошибки выдаёт подскажите в чём прикол ?
    20.  
    21.         if (method_exists($controller, $this->FunctionName))
    22.         {
    23.             call_user_func_array(array($controllerObject, $this->FunctionName), $parameters);
    24.         };
    25.  
    26.  
    27.     }
    28. }
    И есть класс router который отправляет туда аргументы... При загрузке страницы.

    PHP:
    1. <?php
    2. /**
    3. * Created by PhpStorm.
    4. * User: Леонид
    5. * Date: 30.04.2016
    6. * Time: 19:55
    7. */
    8.  
    9. namespace System\Http;
    10.  
    11. use System\Http\Router\Rout;
    12. //use System\Http\Controller;
    13. use System\Http\Router;
    14. use System\Http\Controller\Controller;
    15.  
    16.  
    17. class Route extends Rout
    18. {
    19.     private $rout;
    20.     private $project_name = 'App';
    21.     private $package_name = 'Controller';
    22.  
    23.     public function __construct()
    24.         {
    25.             //Запись маршрутов
    26.             require_once ROOT.'/App/Route.php';
    27.  
    28.             $this->rout = $Rout->getRout();
    29.         }
    30.  
    31.  
    32.     private function getUrl ()
    33.     {
    34.         if (!empty($_SERVER['REQUEST_URI'])) {
    35.             return trim($_SERVER['REQUEST_URI'], '/');
    36.         }
    37.     }
    38.     public function rout()
    39.     {
    40.         $uri = $this->getUrl();
    41.         $uri = explode('?', $uri);
    42.         if (array_key_exists($uri[0],  $this->rout))
    43.         {
    44.             $segments = explode('@', $this->rout[$uri[0]]);
    45.             $controllerName = trim($segments[0]);
    46.             $FunctionName = trim($segments[1]);
    47.             $controller = new Controller($controllerName, $FunctionName); //Вот собственно здесь отправляю аргументы...
    48.             $controller->StartRun($segments);
    49.         }
    50.         else {
    51.             echo 'Ошибка 404 ';
    52.         }
    53.     }
    54. }
    Собственно сами ошибки которые выводятся
    Код (Text):
    1. Warning: Missing argument 1 for System\Http\Controller\Controller::__construct(), called in /var/www/sosed.ru/www/System/Http/Controller/Controller.php on line 24 and defined in /var/www/sosed.ru/www/System/Http/Controller/Controller.php on line 16
    2.  
    3. Warning: Missing argument 2 for System\Http\Controller\Controller::__construct(), called in /var/www/sosed.ru/www/System/Http/Controller/Controller.php on line 24 and defined in /var/www/sosed.ru/www/System/Http/Controller/Controller.php on line 16
    4.  
    5. Notice: Undefined variable: ControllerName in /var/www/sosed.ru/www/System/Http/Controller/Controller.php on line 18
    6.  
    7. Notice: Undefined variable: FunctionName in /var/www/sosed.ru/www/System/Http/Controller/Controller.php on line 19
    8. Привет я GABRIEL // То есть видим тут код отрабатывается... То есть контроллер мой подключается но ошибок куча...
     
    #1 askanim, 4 июн 2016
    Последнее редактирование: 4 июн 2016
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ты тут случайно не этот конструктор вызываешь без аргументов? По идее ты же наследуешь от класса System\Http\Controller
     
    askanim нравится это.
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    PHP:
    1. $controller = 'App\\Controllers\\'.$this->ControllerName;
    2.  
    3.         $controllerObject = new $controller();
    Нет вот же
    Не наследую, а говорю в каком пространстве он крутится.
    Если я правильно понимаю пространство имён то конструкция namespace а\тут\пространство\класса\служитДляОпределенияЕгоПространства

    И в дальнейшем по ним можно автоподгружать классы...

    Короче ошибка вообще была в другом файле ща покажу.

    Вот сам вид контроллера.

    PHP:
    1. namespace App\Controllers;
    2.  
    3.  
    4. use System\Http\Controller\Controller;
    5.  
    6. class MainController extends Controller
    7. {
    8.     public function index() {
    9.         echo '<p align="center">Привет я GABRIEL</p>';
    10.  
    11.         return TRUE;
    12.     }
    13. }
    Так как он наследует класс Controller, соответственно И наследует его метод создания экземпляра класса, т.е. Он вызывает при создании конструктор, а я не посылаю не одного аргумента при вызове, а они там есть вот он и ругается Ё)
     
    #3 askanim, 4 июн 2016
    Последнее редактирование: 4 июн 2016
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Я тебе про это наследование и сказал.
    Что ты получаешь ошибку тут new $controller(); так как вызываешь конструктор который наследовался от __construct ($ControllerName,$FunctionName)
     
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Да ты мне помог очень) Я сперва не вьехал просто, а потом сидел думал, и тут допёр, что я не сделал глупость :D Спасибо, и лайк тебе)