2013-06-12 33 views
7

Tôi đang sử dụng symfony 2.3 khuôn khổ và autoloader tuyên bố đã tìm thấy các tập tin nhưng không có lớp:Autoloader dự kiến ​​lớp 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. 

Các tập tin này được đề cập đến được hiển thị dưới đây:

<?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(); 
    } 
} 

Dù sao, một số chi tiết có thể giúp là tôi vừa mới cài đặt Giáo Lý và chạy các lệnh ...

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

Sau những lệnh này, symfony ngừng hoạt động. Tôi không biết đây có phải là một lỗi lạ hay gì đó không. Nếu bạn cần thêm thông tin, tôi có thể đăng bài. Cảm ơn vì bất kì sự giúp đỡ.

+0

Cố gắng chạy 'php composer.phar install' để đảm bảo rằng tất cả các phụ thuộc được cài đặt và tạo lại tệp tự động tải. –

+0

Đáng buồn thay, điều đó không hiệu quả. –

Trả lời

0

Tôi nghĩ có lỗi trong Symfony2. Gần đây họ đã cập nhật lên một phiên bản mới (2.3.1) của symfony, điều mà tôi nghĩ phải phá vỡ một cái gì đó. Dù sao, tôi đã phải bình luận ra // mới Sensio \ Bundle \ FrameworkExtraBundle \ SensioFrameworkExtraBundle() dòng trong tập tin AppKernel.php để thoát khỏi lỗi.

5

Hiện tại có một chút cũ, nhưng trong trường hợp bất kỳ ai khác đến đây bằng cách tìm kiếm: Đây chắc chắn là vấn đề về bộ nhớ cache. Xóa nội dung của ứng dụng/bộ nhớ cache/dev và ứng dụng/bộ nhớ cache/sản phẩm theo cách thủ công và mọi thứ sẽ giải quyết.

+0

Bạn là một vị cứu tinh cuộc sống! Cảm ơn. –

17

Thẻ mở PHP bị thiếu (hoặc ngắn) cũng có thể gây ra lỗi đó. Có, nó có vẻ buồn cười, nhưng nếu bạn chỉ cần làm theo ví dụ Symfony và sao chép/dán toàn bộ lớp bạn có thể không nhận thấy rằng (như tôi đã không).

+3

Ermahgerd, tôi đã lãng phí như một giờ gỡ lỗi này, tôi đã có '

+0

Nó hoạt động ...

+0

Thẻ mở PHP ngắn không còn được dùng nữa. Luôn sử dụng phiên bản dài. – MilanG

0

Hãy chắc chắn rằng không gian tên của bạn được xác định trong lớp mà bạn đang cố gắng sử dụng. Ví dụ, trong bộ điều khiển của tôi, tôi có:

use Acme\DemoBundle\Amazon\AmazonProductAPI; 

Đây là đường dẫn chính xác đến lớp AmazonProductAPI của tôi, nhưng hệ thống không nhận ra nó cho đến khi tôi thêm không gian tên thích hợp để các lớp:

namespace Acme\DemoBundle\Amazon; 
2

Nếu bất kỳ ai khác có vấn đề này và nó không biến mất bằng cách xóa bộ nhớ cache, thì tôi khuyên bạn nên xóa toàn bộ thư mục với các phụ thuộc của nhà soạn nhạc và thực hiện lại composer install.

Nó làm việc cho tôi :).

0

Câu trả lời của @MilanG đã giúp tôi! Tôi chuyển sang cấu hình PHP của tôi từ

short_open_tag = Off 

để

short_open_tag = On 
+3

Từ những gì tôi biết thẻ mở ngắn không còn được dùng nữa. Vì vậy, tôi nghĩ rằng nó tốt hơn để gắn vào các thẻ mở "bình thường" và sửa lỗi ngắn nếu bạn có chúng trong mã. – MilanG

0

tôi giải quyết vấn đề này bằng cách loại bỏ thêm một \ trước Doctrine như trong:

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

tôi đã sử dụng các tiện ích generate:doctrine:entity để làm cho thực thể cũng như tệp orm.xml. Tiện ích này dường như có lỗi và nó bổ sung thêm \ trong tệp xml như trên. Xóa dấu gạch chéo bổ sung này \ đã giải quyết được sự cố của tôi. Vì vậy, hãy kiểm tra tệp orm.xml sau khi bạn sử dụng lệnh php app/console doctrine:generate:entity để đảm bảo rằng không có thêm dấu gạch chéo ngược nào trong đường dẫn. Lỗi này có thể đã được giải quyết trong các phiên bản sau của Symfony, nhưng chỉ trong trường hợp nếu bạn gặp lỗi này, đây có thể là lý do.

0

Trong trường hợp của tôi, đó là lỗi đánh máy trong tên Lớp. Tôi gặp lỗi trong AssetsCommand.php khi tên lớp được đặt tên là AsssetsCommand

Đảm bảo tên cơ sở của tệp lớp trùng với tên lớp.

0

Cảm thấy như mọi câu trả lời tôi đọc sẽ giải quyết được nhưng không. Trong trường hợp của tôi nó đã được cuối cùng OpCache. Quên tôi đã bật nó trong quá trình phát triển. Giải pháp là khởi động lại PHP-FPM hoặc Httpd (khi sử dụng mod_php) mỗi khi thay đổi được thực hiện cho codebase hoặc tắt OpCache hoàn toàn.

0

Điều đó xảy ra với tôi khi tôi khai báo không gian tên sai.
Ví dụ: Không gian tên AppBundle \ Bộ điều khiển;

nhưng lớp là tại con đường này: AppBundle \ RestController

0

Nếu lỗi này popus lên, bạn nên kiểm tra tên tập tin của bạn cho mọi lỗi là tốt. Tuy nhiên, trong trường hợp của tôi, "Tập tin được tìm thấy nhưng lớp không có trong đó, tên lớp hoặc không gian tên có thể có lỗi chính tả", trên thực tế tên tệp không chính xác ("Từ" thay vì "Biểu mẫu")

Các vấn đề liên quan