簡體   English   中英

超薄框架和雄辯的ORM

[英]Slim Framework and Eloquent ORM

我正在使用Slim FrameworkLaravel's Eloquent 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();

正如您在我的代碼中看到的,我必須在index.php包含User.php文件。 但是,如果我有多個型號怎么辦? 我可以只包含一個文件夾,所有模型也將被包含在內,這樣它就不會看起來很雜亂,包括索引中的每個模型文件。

先感謝您。

更新:我正在使用我看到的這段代碼

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

有一個更清潔的方式嗎?

您可以使用Composer自動包含項目中的類。 假設您的composer.json文件存在於app 然后,你可以使用classmap在你的屬性composer.json自動包含在所有的類models

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

classmap告訴Composer映射指定目錄中的所有類。 然后,您需要做的就是運行composer update以在每次向此目錄添加新文件時更新Composer的包含列表。

是的 ,有一種更清潔的方法,即自動加載。

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

原理是使用文件層次結構模擬命名空間,並相應地將它們加載到命名空間:

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

這將自動包含位於app / models / User.php的文件。 尊重命名空間中的大寫是一種好習慣; 如果您的命名空間是Model \\ User,則該目錄應該尊重大小寫(app / Model / User.php)


您當前解決方案的問題:

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

是它將加載所有類,即使腳本不會使用它們。 注冊自動裝帶器可以防止這種情況,只需加載必要的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM