【问题标题】:How to use Illuminate database instance throughout required PHP files如何在所需的 PHP 文件中使用 Illuminate 数据库实例
【发布时间】:2014-05-15 16:24:59
【问题描述】:

我正在尝试使用 Slim PHP 设置一个宁静的 API。这是我第一次使用微框架,我正在尝试用它来构建一个应用程序,以便它保持可维护性。

我正在尝试像这样构建我的应用程序:

root
- index.php
- composer.json
- app
- - routes
- - - session.php
- - lib
- - - functions.php
- - vendor
- - - Composer Vendor dirs and files

我使用Illumination 来访问我的MySQL 数据库,虽然我的所有代码都在index.php 文件中,但一切正常。当我尝试将身份验证功能拆分到 session.php 中时,我不再能够访问 light 实例。我遵循了 github 页面上的标准设置

use \Slim\Slim;
use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule->addConnection([
'driver'    => 'mysql',
'host'      => 'localhost',
'database'  => 'database',
'username'  => 'root',
'password'  => 'password',
'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix'    => '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));

// Make this Capsule instance available globally via static methods... (optional)
$capsule->setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule->bootEloquent();

$app = new Slim();

//get login routes
require 'app/routes/session.php';

$app->get("/", function() use ($app){

$app->render(200,array(
        'msg' => 'welcome',
    ));
});

这是我的 session.php:

$app->post("/login", function() use ($app){
    $postVarsAll = $app->request->post();
    if( isset($postVarsAll['password']) && isset($postVarsAll['username']))
    {
        //Get associated user
        $app->render(200,array(
            'msg' => print_r(Capsule,true)
        ));
        $user = Capsule::table('user')->where('username','=',$postVarsAll['username'])-  >first();
    }else{
    $app->render(200, array(
        "msg" => "no params",
        "params" => $postVarsAll
    ));
    }

});

这会引发 500 错误并告诉我:

"msg": "NOTICE: Use of undefined constant Capsule - assumed 'Capsule'",

我希望只在 session.php 中使用 Capsule 实例。有人知道怎么做吗?

如果我取出 Capsule,则路线有效。

感谢您的帮助!

编辑

$app->post("/login", function() use ($app,$capsule){
    $postVarsAll = $app->request->post();
    if( isset($postVarsAll['password']) && isset($postVarsAll['username']))
    {
        //Get associated user
        $app->render(200,array(
            'msg' => print_r($capsule,true)
        ));
     return;
     ...

有了这个,我得到了完整的胶囊对象。

编辑 2

感谢 volkinc 找到答案。 我可以使用$capsule->table("user")->... 来满足我的查询需求。

【问题讨论】:

    标签: php slim illuminate-container


    【解决方案1】:
    'msg' => print_r(Capsule,true)
    

    试试

    'msg' => print_r($capsule,true)
    

    【讨论】:

    • 如果我这样做,我会得到 $capsule 对象。我在上面的编辑中显示它。您是否知道如何获取用于运行查询的 Capsule 实例?
    • $user = Capsule::table('user') 没有实例创建 table() 是一个静态函数。
    • 试试 $capsule = new Capsule;并搜索 $capsule->getTable() 或类似的东西,你肯定会找到
    • 是的!表函数。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多