Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Непонятка с namespace'ами

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
nkl
Отправлено: 13 Февраля, 2017 - 21:54:48
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Всем добра. Имею такую структуру каталогов:
root/app
root/vendor
root/app/console.php
root/app/Command/StatusTesterCom mand.php
root/vendor/autoload.php

Содержимое файла console.php:
PHP:
скопировать код в буфер обмена
  1. #!/usr/bin/env php
  2. <?PHP
  3. namespace App;
  4.  
  5. require __DIR__ . '/../vendor/autoload.php';
  6.  
  7. use Symfony\Component\Console\Application;
  8. use App\Command\StatusTesterCommand;
  9.  
  10. $application = new Application();
  11. $application->add(new StatusTesterCommand());
  12.  
  13. $application->run();

Содержимое файла StatusTesterCommand.php:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. namespace \App\Command;
  4.  
  5. use Symfony\Component\Console\Command\Command as SymfonyCommand;
  6. use Symfony\Component\Console\Input\InputInterface as II;
  7. use Symfony\Component\Console\Output\OutputInterface as OI;
  8.  
  9. class StatusTesterCommand extends SymfonyCommand
  10. {
  11.  
  12.     protected function configure()
  13.     {
  14.         $this
  15.             ->setName('status-tester')
  16.             ->setDefinition('Simple status tester for thess addresses')
  17.             ->setHelp('This command can help you for simple test you pages on status code');
  18.     }
  19.  
  20.     protected function execute(II $i, OI $o)
  21.     {
  22.         dump(__FILE__);
  23.     }
  24.  
  25. }
  26.  

При выполнении app/console.php list выдает:
Цитата:
PHP Fatal error: Uncaught Error: Class 'App\Command\StatusTester' not found in /home/nkl/projects/crawler/app/console.php:10
Stack trace:
#0 {main}
thrown in /home/nkl/projects/crawler/app/c onsole.php on line 11


Что я делаю не так? На такой элементарщене запнулся и уже час сижу Нахмурился
 
 Top
Мелкий Супермодератор
Отправлено: 13 Февраля, 2017 - 22:12:56
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




nkl пишет:
Uncaught Error: Class 'App\Command\StatusTester' not found

Не StatusTesterCommand.
Т.е. сами по себе пространства имён ни при чём.


-----
PostgreSQL DBA
 
 Top
nkl
Отправлено: 13 Февраля, 2017 - 22:22:58
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Пардон. Я эксперементировал с именами методом научного тыка и немножко не то запостил, вот так все выглядит сейчас:
PHP:
скопировать код в буфер обмена
  1. #!/usr/bin/env php
  2. <?PHP
  3. namespace App;
  4.  
  5. require __DIR__ . '/../vendor/autoload.php';
  6.  
  7. use Symfony\Component\Console\Application;
  8. use App\Command\StatusTesterCommand;
  9.  
  10. $application = new Application();
  11.  
  12. $application->add(new StatusTesterCommand()); //ругается на эту строчку
  13.  
  14. $application->run();


PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. namespace App\Command;
  4.  
  5. use Symfony\Component\Console\Command\Command as SymfonyCommand;
  6. use Symfony\Component\Console\Input\InputInterface as II;
  7. use Symfony\Component\Console\Output\OutputInterface as OI;
  8.  
  9. class StatusTesterCommand extends SymfonyCommand
  10. {
  11.  
  12.     protected function configure()
  13.     {
  14.         $this
  15.             ->setName('status-tester')
  16.             ->setDefinition('Simple status tester for thess addresses')
  17.             ->setHelp('This command can help you for simple test you application');
  18.     }
  19.  
  20.     protected function execute(II $i, OI $o)
  21.     {
  22.         dump(__FILE__);
  23.     }
  24.  
  25. }

А вот текст ошибки:
Цитата:
nkl@nkl-home ~/projects/crawler $ app/console.php list
PHP Fatal error: Uncaught Error: Class 'App\Command\StatusTesterCommand' not found in /home/nkl/projects/crawler/app/console.php:12
Stack trace:
#0 {main}
thrown in /home/nkl/projects/crawler/app/c onsole.php on line 12

(Добавление)
И даже пробую так сделать:
PHP:
скопировать код в буфер обмена
  1. #!/usr/bin/env php
  2. <?PHP
  3. namespace App;
  4.  
  5. require __DIR__ . '/../vendor/autoload.php';
  6.  
  7. use Symfony\Component\Console\Application;
  8.  
  9. //use App\Command\StatusTesterCommand;
  10.  
  11. $application = new Application('simple-tester', '0.0.1');
  12. $myCommand = new Command\StatusTesterCommand();
  13. //$application->add(new StatusTesterCommand());
  14.  
  15. $application->run();
  16.  

Один фиг, такая же ошибка:
Цитата:
PHP Fatal error: Uncaught Error: Class 'App\Command\StatusTesterCommand' not found in /home/nkl/projects/crawler/app/console.php:12
Stack trace:
#0 {main}
thrown in /home/nkl/projects/crawler/app/c onsole.php on line 12
 
 Top
nkl
Отправлено: 14 Февраля, 2017 - 05:57:35
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Нашел в чем проблема. Ребят, не забывайте зарегать свой корневой namespace в composer.json:
CODE (javascript):
скопировать код в буфер обмена
  1. "autoload": {
  2.         "psr-4": {
  3.             "App\\": "app/"
  4.         }
  5.     },

А потом выполните composer update или composer dump-autoload. И будет вам счастье.

P.S.
Я думал php.su уже стух, ан нет, живет и здравствует. Все бобра Радость
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB