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
Форумы портала PHP.SU :: Версия для печати :: Непонятка с namespace'ами
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Непонятка с namespace'ами

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

1. nkl - 13 Февраля, 2017 - 21:54:48 - перейти к сообщению
Всем добра. Имею такую структуру каталогов:
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


Что я делаю не так? На такой элементарщене запнулся и уже час сижу Нахмурился
2. Мелкий - 13 Февраля, 2017 - 22:12:56 - перейти к сообщению
nkl пишет:
Uncaught Error: Class 'App\Command\StatusTester' not found

Не StatusTesterCommand.
Т.е. сами по себе пространства имён ни при чём.
3. nkl - 13 Февраля, 2017 - 22:22:58 - перейти к сообщению
Пардон. Я эксперементировал с именами методом научного тыка и немножко не то запостил, вот так все выглядит сейчас:
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
4. nkl - 14 Февраля, 2017 - 05:57:35 - перейти к сообщению
Нашел в чем проблема. Ребят, не забывайте зарегать свой корневой namespace в composer.json:
CODE (javascript):
скопировать код в буфер обмена
  1. "autoload": {
  2.         "psr-4": {
  3.             "App\\": "app/"
  4.         }
  5.     },

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

P.S.
Я думал php.su уже стух, ан нет, живет и здравствует. Все бобра Радость

 

Powered by ExBB FM 1.0 RC1