2014-10-03 15 views
6

Tôi đang sử dụng nhà soạn nhạc trong dự án mới nhất của tôi và lập bản đồ chức năng của tôi như thế nàyComposer Autoload nhiều tập tin trong thư mục

"require": { 
    ... 
}, 
"require-dev": { 
    ... 
}, 
"autoload": { 
    "psr-4": { 
     ... 
    }, 
    "files": [ 
     "src/function/test-function.php" 
    ] 
} 

tôi tưởng tượng sẽ có rất nhiều tập tin trong một thư mục chức năng, ví dụ: thực chức năng -1.php, real-function-2.php, v.v. Vậy, nhà soạn nhạc có thể gọi tất cả các tệp trong hàm thư mục không? tôi lười biếng sử dụng

"files": [ 
    "src/function/real-function-1.php", 
    "src/function/real-function-2.php", 
    .., 
    "src/function/real-function-100.php", 
] 

Có lười biếng như tôi ...

+1

Đó là công việc của chức năng 'tự động tải '. Nó sẽ tự động tải "tập tin chính" mà typicallu sẽ bao gồm một loạt các câu lệnh yêu cầu. [Đây là một ví dụ] (https://github.com/WhitePayments/white-php/blob/master/White.php) – FloatingRock

Trả lời

11

Nếu bạn không thể không gian tên chức năng của mình (bởi vì nó sẽ phá vỡ một loạt các mã, hoặc bởi vì bạn không thể sử dụng PSR -4), và bạn không muốn tạo các lớp tĩnh giữ các hàm của bạn (có thể được tải tự động), bạn có thể tạo tệp bao gồm toàn cục của riêng mình và sau đó yêu cầu trình soạn thảo bao gồm nó.

composer.json

{ 
    "autoload": { 
     "files": [ 
      "src/function/include.php" 
     ] 
    } 
} 

include.php

$files = glob(__DIR__ . '/real-function-*.php'); 
if ($files === false) { 
    throw new RuntimeException("Failed to glob for function files"); 
} 
foreach ($files as $file) { 
    require_once $file; 
} 
unset($file); 
unset($files); 

Đây là phi lý tưởng vì nó sẽ tải tất cả các tập tin cho mỗi yêu cầu, bất kể có hay không các chức năng trong nó được sử dụng, nhưng nó sẽ hoạt động.

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