2013-07-03 26 views
8

Tôi có một gói Symfony, nơi tôi sẽ phải sử dụng một lớp tùy chỉnh. Lớp này không cần phải truy cập từ tất cả các trang web, nhưng chỉ trong một bộ điều khiển của gói này. Tôi đã thấy một vài giải pháp liên quan đến các nhà cung cấp, nhưng điều này khá nặng và không cần thiết trong trường hợp của tôi. Có ai có giải pháp đơn giản hơn không?Cách đưa lớp tùy chỉnh vào Gói Symfony?

+0

'không gian tên Acme \ MyBundle \ Class' .. để sử dụng:' sử dụng Acme \ MyBundle \ Class \ MyClass.php' –

Trả lời

5

Lớp học phải được tạo trong Acme\Bundle\Model không gian tên và thư mục, không phải\Class! Ai nói cái này?!

// ../src/Acme/Bundle/Model/Utility.php 
<?php namespace Acme\Bundle\Model; 
class Utility: 
.. 

Sử dụng trong điều khiển:

<?php .. 
use Acme\Bundle\Model\Utility; 

$x = new Utility(); // FINE!:) 

Tên của tập tin (Utility.php) phải bằng tên lớp.

+0

Rõ ràng, tôi đã nói, khi tôi sử dụng từ 'Lớp' làm ví dụ. Xin lỗi bạn đã treo lên trên từ và bỏ mẫu :) Vị trí thực tế của lớp học thực sự không có gì để làm với vấn đề của OP. –

+0

Vâng tôi có được bạn. Chỉ trích :) – Croll

20

Đây là những gì namespaces dành cho.

Từ php.net:

không gian tên là gì? Trong các không gian tên định nghĩa rộng nhất là cách đóng gói các mục.

Chỉ cần đặt, bao gồm không gian tên của bạn ở đầu lớp tùy chỉnh của bạn.

src/Acme/DemoBundle/mẫu/MyClass.php

<?php 
namespace Acme\DemoBundle\Model; 

class MyClass { // ... 

và sử dụng nó trong điều khiển của bạn:

src/Acme/SomeOtherBundle/Controller/DefaultController.php

<?php 
namespace Acme\SomeOtherBundle\Controller; 

// ... 
use Acme\DemoBundle\Model\MyClass; # can be used in any class in any bundle 
// ... 

class DefaultController extends Controller { // ... 
+0

'.php' ở cuối là không cần thiết, vì mọi tệp trong' src/'được được tự động tải. –

+0

@Pazi đã không chú ý, nắm bắt tốt, chỉnh sửa –

+0

Cảm ơn bạn đã trả lời. Tôi đã làm nó, nhưng trên thực tế, tôi không có ý tưởng nơi tập tin php của lớp phải được đặt, và tôi không biết làm thế nào để bao gồm nó ... (autoloads?) – maxime

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