gpt4 book ai didi

php - 在 Slim Framework 3 类中访问应用程序

转载 作者:可可西里 更新时间:2023-10-31 22:08:46 25 4
gpt4 key购买 nike

当路由位于与 index.php 不同的类中时,我无法理解如何访问 Slim 的实例

在使用 Slim Framework 2 时,我总是使用以下内容,但它在 Slim 3 中不起作用:

$this->app = \Slim\Slim::getInstance();

我试图访问我在容器中设置的数据库连接,但来自一个单独的类。这是我目前在 index.php 中获得的用于启动 Slim 应用程序的内容:

require_once("rdb/rdb.php");
$conn = r\connect('localhost');
$container = new \Slim\Container;
$container['rdb'] = function ($c){return $conn;}
$app = new \Slim\App($container);

这是我的路线:

$app->get('/test','\mycontroller:test');

这就是我在我的路由指向的 mycontroller.php 类中得到的,这显然不起作用,因为 $this->app 不存在:

class mycontroller{
public function test($request,$response){
$this->app->getContainer()->get('rdb');
}

错误信息如下,因为与 Slim 2 相比,getinstance 不是 Slim 3 的一部分:

Call to undefined method Slim\App::getInstance() 

感谢任何帮助,

问候丹

最佳答案

看看 Slim 3 Skeleton由 Rob Allen 创建。

Slim 3 大量使用依赖注入(inject),因此您可能也想使用它。

在您的 dependencies.php 中添加如下内容:

$container = $app->getContainer();

$container['rdb'] = function ($c) {
return $conn;
};

$container['Your\Custom\Class'] = function ($c) {
return new \Your\Custom\Class($c['rdb']);
};

在你的 Your\Custom\Class.php 中:

class Class {
private $rdb;
function __construct($rdb) {
$this->rdb = $rdb;
}

public function test($request, $response, $args) {
$this->rdb->doSomething();
}
}

希望对您有所帮助,如果您还有其他问题,请随时提出。

更新:

当你这样定义你的路线时

$app->get('/test', '\mycontroller:test');

Slim 在您的容器中查找 \mycontroller:test:

$container['\mycontroller'] = function($c) {
return new \mycontroller($c['rdb']);
}

因此,当您在浏览器中打开 www.example.com/test 时,Slim 会自动创建一个新的 \mycontroller 实例并执行方法 test 带有参数 $request$response$args。因为您接受数据库连接作为您的 mycontroller 类的构造函数的参数,所以您也可以在该方法中使用它:)

关于php - 在 Slim Framework 3 类中访问应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com