嗨,我是新来的苗条我坚持这个任何人的帮助,请
routes.php文件
$app->get('/', 'UserController:index');
dependencis.php
$container['src\UserController'] = function ($container) {
return new \src\UserController($container->get('settings'));
};
UserController.php
namespace App\Controllers;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use App\src\Controller;
class UserController extends Controller {
public function index(Request $request, Response $response) {
return $this->db;
}
}
和 controller.php
namespace App\src;
class Controller {
protected $container;
public function __construct($c) {
$this->container = $c;
}
public function __get($property) {
if($this->container->has($property)) {
return $this->container->get($property);
}
return $this->{$property};
}
}
答案 0 :(得分:7)
您已将路线定义为:
$app->get('/', 'UserController:index');
然后您需要将DI工厂定义为:
$container['UserController'] = function ($container) {
// return an instantiated UserController here.
};
您还应该查看命名空间和PSR-4如何将命名空间名称映射到目录。通常,命名空间名称中永远不会有src
,但您确实会在composer.json中指定的Composer自动加载器中看到映射到目录调用App
的{{1}}等命名空间。
通常,它看起来像这样:
src
这意味着您有一个名为"autoload": {
"psr-4": {
"App\\": "src/"
}
},
的目录,该目录中的任何类都将具有src
的基本命名空间,然后任何其他目录充当子命名空间。
即。如果您有一个名为App
的文件,那么该文件中的类定义将是:
src/Controllers/UserController.php
另请注意,文件名的大小写与类名匹配,并且目录的大小写与子名称空间的大小写匹配。
继续这个例子,我希望DI工厂看起来像这样:
<?php
namespace App\Controllers;
class UserController
{
// methods here
}
在命名空间定义中看到$container['UserController'] = function ($container) {
return new \App\Controllers\UserController($container->get('settings'));
};
是非常不寻常的,因此请检查磁盘上的命名空间和文件是否都匹配,因为问题中的代码不一致。
答案 1 :(得分:0)
您可以检查包含控制器类的文件(controller.php)的名称。它们必须相同。
例如:
如果您具有 Contoller.php 文件,则必须使用此类 C ontroller之类的名称。
在您的示例中,您有 Controller.php 文件,其大写字母为 C 但是, c ontroller类不是以大写字母开头。
因此,请确保文件名与类名相同。
希望这会对您有所帮助。
答案 2 :(得分:0)
就我而言,这是可行的,我也希望您能
home_controller.php
//@version=4
strategy(title="Strategy:Moving Average",overlay=true)
SMA = sma(close,30)
plot(SMA)
route.php *
namespace Apa\Kabar;
use Psr\Container\ContainerInterface;
class HomeController
{
protected $container;
// constructor receives container instance
public function __construct(ContainerInterface $container) {
$this->container = $container;
}
public function home($request, $response, $args) {
// your code
// to access items in the container... $this->container->get('');
return $response->write('apa kabar');
}
public function contact($request, $response, $args) {
// your code
// to access items in the container... $this->container->get('');
return $response;
}
}