2016-08-17 4 views
0

Я новичок в использовании композитора и psr-0. Я попробовал небольшое приложение, используя композитор и psr-0. Я использовал пространство имен для загрузки определенного класса. Когда я вызываю класс с использованием поставщика композитора/автозагрузки, я получаю класс не найденной ошибкой.Композитор Autoload не загружает класс

Мой файл composer.json: /var/www/html/silexapp/composer.json

{ 
"require": { 
    "silex/silex": "~2.0", 
    "symfony/console": "~2.6" 
}, 
"autoload": { 
    "psr-0": { 
     "MyApp": "/silexapp/app" 
    } 
} 
} 

Мой композитор поставщик автозагрузку файл: /var/www/html/silexapp/vendor/autoload.php

 <?php 

     // autoload.php @generated by Composer 

    require_once __DIR__ . '/composer' . '/autoload_real.php'; 

    return ComposerAutoloaderInitf7241d907c173a8d77da0791cc918856::getLoader(); 

имя Мой файл класса Underline.php: /var/www/html/silexapp/app/Tnq/Todo/Command/Underline.php

 <?php 
     namespace MyApp\Tnq\Todo\Command; 
    class Underline{ 

     public function add($a,$b){ 

     return $result = $a+$b; 

    } 

    } 

    ?> 

Мой соседний Имя файла класса г Bold.php: /var/www/html/silexapp/app/Tnq/Todo/Command/Bold.php

<?php 
    require_once "../../../../vendor/autoload.php"; 
    //require_once "Underline.php"; 

    use MyApp\Tnq\Todo\Command as tool; 

    echo "this is the index file to check namespace."; 
    $c = new tool\Underline(); 
    echo "============================="; 
    echo "Addition : ".$c->add(2,2); 
    ?> 

Я получаю «класс не найдена ошибка» в моем классе bold.php файл, когда я использую файл автозагрузки. Но когда я напрямую включил файл класса underline, я получаю вывод. Почему он не работает, когда я использую автозагрузку?

Может ли кто-нибудь помочь мне найти проблему?

ответ

1

«Ключ» должен быть каталогом по пути, который вы указываете как «значение», которое должно быть относительным к вашему рабочему каталогу. Чтобы посмотреть на это простым способом, namespace должен отобразить структуру каталогов; вам не нужен каталог MyApp.

Если в вашем composer.json есть:

"autoload": { 
     "psr-0": { 
      "MyApp\\": "app/" 
     } 
    } 

Тогда вам нужен каталог MyApp под app/. Попробуйте это:

composer.json:

// /var/www/html/silexapp/composer.json 
{ 
    "require": { 
     "silex/silex": "~2.0", 
     "symfony/console": "~2.6" 
    }, 
    "autoload": { 
     "psr-0": { 
      "Tnq\\": "app/" 
     } 
    } 
} 

Underline.php:

<?php 
// /var/www/html/silexapp/app/Tnq/Todo/Command/Underline.php 
namespace Tnq\Todo\Command; 

class Underline 
{ 
    public function add($a,$b) 
    { 
     return $result = $a+$b; 
    } 
} 

Bold.php:

<?php 
// /var/www/html/silexapp/app/Tnq/Todo/Command/Bold.php 
require_once "../../../../vendor/autoload.php"; 

use Tnq\Todo\Command as tool; 

echo 'this is the index file to check namespace.' . PHP_EOL; 
$c = new tool\Underline(); 
echo "============================="; 
echo "Addition : ".$c->add(2,2); 

В теории, это должно работает (не проверял:))


источники:

+0

Спасибо. оно работает. На самом деле я неправильно дал путь. – malar

Смежные вопросы