2013-06-12 14 views
7

używam symfony 2.3 ram i autoloader twierdzi, że znalazł pliku, ale bez klasy:Autoloader oczekuje klasy Symfony2

RuntimeException: The autoloader expected class "Sensio\Bundle\ 
FrameworkExtraBundle\Request\ParamConverter\DateTimeParamConverter" 
to be defined in file "/home/na/auth/vendor/sensio/framework-extra-bundle/ 
Sensio/Bundle/FrameworkExtraBundle/Request/ParamConverter/ 
DateTimeParamConverter.php". The file was found but the class was not in it, 
the class name or namespace probably has a typo. 

Plik ten jest refering jest pokazany poniżej:

<?php 

/* 
* This file is part of the Symfony framework. 
* 
* (c) Fabien Potencier <[email protected]> 
* 
* This source file is subject to the MIT license that is bundled 
* with this source code in the file LICENSE. 
*/ 

namespace Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 
use DateTime; 

/** 
* Convert DateTime instances from request attribute variable. 
* 
* @author Benjamin Eberlei <[email protected]> 
*/ 
class DateTimeParamConverter implements ParamConverterInterface 
{ 
    /** 
    * @{inheritdoc} 
    * 
    * @throws NotFoundHttpException When invalid date given 
    */ 
    public function apply(Request $request, ConfigurationInterface $configuration) 
    { 
     $param = $configuration->getName(); 

     if (!$request->attributes->has($param)) { 
      return false; 
     } 

     $options = $configuration->getOptions(); 
     $value = $request->attributes->get($param); 

     $date = isset($options['format']) 
      ? DateTime::createFromFormat($options['format'], $value) 
      : new DateTime($value); 

     if (!$date) { 
      throw new NotFoundHttpException('Invalid date given.'); 
     } 

     $request->attributes->set($param, $date); 

     return true; 
    } 

    /** 
    * @{inheritdoc} 
    */ 
    public function supports(ConfigurationInterface $configuration) 
    { 
     if (null === $configuration->getClass()) { 
      return false; 
     } 

     return "DateTime" === $configuration->getClass(); 
    } 
} 

Zresztą jakiś szczegół, który może pomóc to, że niedawno zainstalowana Nauki i pobiegł polecenia ...

2028 php app/console doctrine:schema:create 
2029 php app/console doctrine:generate:entities Auth 

Po tych poleceniach symfony przestał działać. Nie wiem, czy to jakiś dziwny błąd czy coś takiego. Jeśli potrzebujesz więcej informacji, mogę opublikować. Dzięki za pomoc.

+0

Spróbuj uruchomić 'php composer.phar install', aby upewnić się, że wszystkie zależności zostały zainstalowane i odtworzone automatycznie. –

+0

Niestety, to nie zadziałało. –

Odpowiedz

0

Myślę, że w Symfony2 jest błąd. Niedawno zaktualizowano do nowej wersji (2.3.1) symfony, która moim zdaniem musi coś zepsuć. W każdym razie musiałem skomentować // nową linię Sensio \ Bundle \ FrameworkExtraBundle \ SensioFrameworkExtraBundle() w pliku AppKernel.php, aby pozbyć się błędu.

5

To jest trochę za stare, ale na wypadek, gdyby ktoś tu trafił, szukaj: Jest to niewątpliwie problem z pamięcią podręczną. Ręcznie usuń zawartość aplikacji/cache/dev i app/cache/prod, a wszystko powinno zostać rozwiązane.

+0

Jesteś zbawicielem życia! Dzięki. –

17

Brakujący (lub krótki) znacznik otwierający PHP również może spowodować ten błąd. Tak, brzmi to śmiesznie, ale jeśli po prostu podążysz za przykładem Symfony i skopiujesz/wkleisz całą klasę, możesz tego nie zauważyć (tak jak ja nie).

+3

Ermahgerd, zmarnowałem się jak godzina debugowania tego, miałem '

+0

Działa ...

+0

Krótkie tagi otwierające PHP są przestarzałe. Zawsze używaj długiej wersji. – MilanG

0

Upewnij się, że przestrzeń nazw jest zdefiniowana w klasie, z której próbujesz korzystać. Na przykład w moim kontroler miałem:

use Acme\DemoBundle\Amazon\AmazonProductAPI; 

To była prawidłowa ścieżka do mojej klasy AmazonProductAPI, ale system nie rozpozna go, dopóki nie dodał prawidłowego nazw do klasy:

namespace Acme\DemoBundle\Amazon; 
2

Jeśli ktoś inny ma ten problem i nie zniknie poprzez wyczyszczenie pamięci podręcznej, zalecam usunięcie całego folderu z zależnościami kompozytor i ponowne wykonanie composer install.

To zadziałało dla mnie :).

0

Odpowiedź @MilanG pomógł mi! Zmieniłem moją konfigurację PHP z

short_open_tag = Off 

do

short_open_tag = On 
+3

Z tego, co wiem, tag otwierający krótki jest przestarzały. Myślę więc, że lepiej trzymać się "normalnych" tagi otwierających i naprawiać krótkie, jeśli masz je w kodzie. – MilanG

0

I rozwiązany ten problem poprzez usunięcie dodatkowego \ przed Doctrine jak w:

<entity repository-class="ACC\Bundle\MGLBundle\\\Doctrine\ORM\PersonRepository" 
     name="ACC\Bundle\MGLBundle\Entity\Person" >` 

Użyłem narzędzia generate:doctrine:entity aby podmiot, a także plik orm.xml. To narzędzie wydaje się mieć błąd i dodaje dodatkowe \ w pliku xml jak wyżej. Usunięcie tego dodatkowego ukośnika odwrotnego rozwiązało mój problem. Tak więc sprawdź plik orm.xml po użyciu polecenia php app/console doctrine:generate:entity, aby upewnić się, że w ścieżce nie ma dodatkowych ukośników odwrotnych. Ten błąd mógł zostać rozwiązany w późniejszych wersjach Symfony, ale na wszelki wypadek, jeśli pojawi się ten błąd, może to być przyczyną.

0

W moim przypadku był to literówka w nazwie klasy. Wystąpił błąd w AssetsCommand.php, gdy nazwa klasy została nazwana jako AsssetsCommand

Upewnij się, że nazwa podstawowa pliku klasowego jest identyczna z nazwą klasy.

0

Czułem się tak, jak każda odpowiedź, którą przeczytam, rozwiązałoby, ale nie. W moim przypadku był to ostatecznie OpCache. Zapomniałem, że włączono go podczas programowania. Rozwiązaniem jest ponowne uruchomienie PHP-FPM lub Httpd (przy użyciu mod_php) za każdym razem, gdy zmiana zostanie wprowadzona do bazy kodów lub całkowite wyłączenie OpCache.

0

Zdarza mi się, gdy deklaruję niewłaściwy obszar nazw.
Przykład: AppBundle obszaru nazw \ Kontroler;

ale klasa jest na tej drodze: AppBundle \ RestController

0

Jeśli ten błąd popus się, należy sprawdzić pisownię nazwy plików, jak również. W moim przypadku jednak powiedział: "Plik został znaleziony, ale klasa nie była w nim, nazwa klasy lub przestrzeń nazw prawdopodobnie ma literówkę", w rzeczywistości nazwa pliku nie była poprawna ("Od" zamiast "Formularz")