Php Slim框架和雄辩的ORM

Php Slim框架和雄辩的ORM,php,laravel,eloquent,composer-php,slim,Php,Laravel,Eloquent,Composer Php,Slim,我正在使用Slim框架和Laravel的雄辩ORM这是我的代码: User.php class User extends \Illuminate\Database\Eloquent\Model { protected $table = 'accounts'; } require_once 'vendor/autoload.php'; // Models include 'app/models/User.php'; $app = new \Slim\Slim(); // Datab

我正在使用
Slim框架
Laravel的雄辩ORM
这是我的代码:

User.php

class User extends \Illuminate\Database\Eloquent\Model
{
    protected $table = 'accounts';
}
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

class User extends \Illuminate\Database\Eloquent\Model
{
    protected $table = 'accounts';
}
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
中。然后,您可以使用
composer.json
中的
classmap
属性自动包含
模型中的所有类

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

classmap
告诉Composer映射指定目录中的所有类。然后,您只需运行
composer update
即可在向该目录添加新文件时更新composer的包含列表。

是的,有一种更干净的方法可以做到这一点,即自动加载

它归结为自定义类加载器的使用和

原则是用文件层次结构模拟名称空间,并相应地将其加载到名称空间:

$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;
}

它将加载所有类,即使脚本不使用它们。注册自动加载器将防止这种情况,只加载必要的代码。

将您的模型文件夹添加到自动加载器(composer)中,并将它们全部放在干净代码的命名空间中:)