2015-11-04 97 views
4

我使用Slim FrameworkLaravel's Eloquent ORM在一起,這是我的代碼:修身框架和雄辯的ORM

user.php的

class User extends \Illuminate\Database\Eloquent\Model 
{ 
    protected $table = 'accounts'; 
} 

的index.php

require_once 'vendor/autoload.php'; 

// Models 
include 'app/models/User.php'; 

$app = new \Slim\Slim(); 

// Database information 
$settings = array(
    'driver' => 'mysql', 
    'host' => '127.0.0.1', 
    'database' => 'photo_mgmt', 
    'username' => 'root', 
    'password' => '', 
    'collation' => 'utf8_general_ci', 
    'prefix' => '', 
    'charset' => 'utf8', 
); 

$container = new Illuminate\Container\Container; 
$connFactory = new \Illuminate\Database\Connectors\ConnectionFactory($container); 
$conn = $connFactory->make($settings); 
$resolver = new \Illuminate\Database\ConnectionResolver(); 
$resolver->addConnection('default', $conn); 
$resolver->setDefaultConnection('default'); 
\Illuminate\Database\Eloquent\Model::setConnectionResolver($resolver); 

$app->get('/', function() use ($app) { 
    $users = \User::all(); 
    echo $users->toJson(); 
}); 

$app->run(); 

正如你在我的代碼中看到的那樣,我必須在我的中包含User.php文件。但是如果我有多個模型呢?我可以只包含一個文件夾,並且所有模型也將包含在內,這樣它就不會顯得雜亂無章,包括索引中的每個模型文件。

預先感謝您。

UPDATE: 我使用這段代碼,我看到

foreach (glob("app/models/*.php") as $filename) 
{ 
    include $filename; 
} 

是否有一個更清潔的方式看?

+2

添加您的模型文件夾到磁帶自動加載(作曲家),並把他們都在乾淨的代碼命名空間:) –

回答

8

您可以使用Composer來自動包含在你的項目的類。比方說,你composer.json文件生命app。然後你就可以在models使用classmap屬性,爲composer.json自動包括所有類:

... 
"require": { 
    "php" : ">=5.4.0", 
    "slim/slim" : "2.*", 
    "illuminate/database" : "5.0.33", 
    ... 
}, 
"autoload": { 
    "classmap" : [ 
     "models" 
    ] 
} 

classmap告訴作曲家的所有類在指定的目錄(IES)映射。然後,所有你需要做的就是運行composer update更新作曲家的名單包括只要添加一個新的文件到這個目錄。

0

,有做到這一點,即自動加載一個更清潔的方式。

它歸結爲使用spl_autoload_register()和自定義類加載器。

的原理是模仿與文件層次的命名空間,並相應地加載這些命名空間:

$loader = function load($class) 
{ 
    include __DIR__."/app/$class.php"; 
} 
spl_autoload_register($loader); 
$user = new models\User(); 

這將自動包含該文件位於應用程序/模型/ user.php的。尊重名字空間中的大寫內容是一種很好的做法。如果你的命名空間是型號\用戶,目錄應該尊重外殼(應用/型號/ user.php的)


與您當前的解決方案的問題:

foreach (glob("app/models/*.php") as $filename) 
{ 
    include $filename; 
} 

是,它會加載所有類,即使腳本不會使用它們。註冊一個自動加載器將防止這種情況,只加載必要的代碼。