Slim Framework:将HTTP请求路由到静态类方法

我刚开始使用Slim Framework来创建我的rest API。 一切正常,直到我尝试将HTTP请求路由到静态类方法(之前我使用过匿名函数)。 下面是 index.php </ code>上的新路由代码:</ p>

  include“vendor / autoload.php”; 
$ config = ['settings' =&GT; [
'addContentLengthHeader'=&gt; false,
'displayErrorDetails'=&gt; 是的,
确定路由前应用中间件'=&gt; true
]
];

$ app = new \ Slim \ App($ config);
$ app-&gt; get('/ user / test','\ App \ Controllers \ UserController:test ');
$ app-&gt; run();
</ code> </ pre>

以下是 UserController上的 UserController </ code>类。 php </ code> </ p>

  class UserController {
public function test($ request,$ response,$ args){
$ array = ['message'=&gt; '你的路线运作良好'];
返回$ response-&gt; withStatus(STAT_SUCCESS)
  • &gt; withJson($ array);
    }
    }
    </ code> </ pre>
    \ n

    错误详细信息:</ p>

     类型:RuntimeException 
    Message:Callable \ Controllers \ UserController不存在
    File:/ var / www / html / project_api / vendor / slim  /slim/Slim/CallableResolver.php
    

    nn

    下面是我的项目文件夹树</ p>

      project_api / 
    index .php
    vendor /
    slim / slim / Slim / CallableResolver.php

控制器/
用户控件.php
</ code> </ pre>

my composer.json </ code> </ p>

  {
“require”:{
“slim” / slim“:”^ 3.8“,
”“sergeytsalkov / meekrodb”:“*”,
“slim / http-cache”:“^ 0.3.0”
}
},
“autoload”: {
“psr-4”:{
“Controllers \”:“Controllers /”
}
}
</ </ code> </ pre>
</ div>

展开原文

原文

I just started using Slim Framework to create my rest API. Everything works well until I try to route HTTP request to a static class method (I used the anonymous function before). Below is my new route code on index.php:

include "vendor/autoload.php";
$config = ['settings' => [
               'addContentLengthHeader' => false,
               'displayErrorDetails'    => true,
               'determineRouteBeforeAppMiddleware' => true
            ]
          ];

$app = new \Slim\App($config);
$app->get('/user/test', '\App\Controllers\UserController:test');
$app->run();

And below is my UserController class on UserController.php

class UserController{
    public function test($request, $response, $args){
        $array = ['message'=>'your route works well'];
        return $response->withStatus(STAT_SUCCESS)
                        ->withJson($array);
    }
}

Error details:

Type   : RuntimeException
Message: Callable \Controllers\UserController does not exist
File   : /var/www/html/project_api/vendor/slim/slim/Slim/CallableResolver.php

Below is my project folder tree

project_api/
           index.php
           vendor/
                 slim/slim/Slim/CallableResolver.php

           Controllers/
                      UserController.php

my composer.json

{
    "require": {
        "slim/slim": "^3.8",
        "sergeytsalkov/meekrodb": "*",
        "slim/http-cache": "^0.3.0"
    }
},
"autoload": {
    "psr-4": {
        "Controllers\\": "Controllers/"
    }
}

dongliang7545
dongliang7545 将自动加载添加到作曲家并运行作曲家更新。使用stackoverflow.com/questions/31500702/slim-3-autoloader中的参考。仍然有同样的错误
3 年多之前 回复
doucuo8618
doucuo8618 stackoverflow.com/questions/20181181/composer-autoloading
3 年多之前 回复
du532861657
du532861657 我没有。添加了我的composer.json。有什么建议吗?
3 年多之前 回复
dt2015
dt2015 你有定义的作曲家自动加载吗?
3 年多之前 回复
drl2051
drl2051 嗨@jmattheis,谢谢你的纠正。更改了类名,仍然遇到了同样的错误
3 年多之前 回复
dongluoqiu0255
dongluoqiu0255 你调用了UsernotUserController类
3 年多之前 回复

1个回答



似乎您的命名空间定义不正确。 在 composer.json </ code>,类 UserController </ code>下的命名空间 Controllers </ code>。</ p>

你应该定义一个命名空间 位于 UserController.php </ code>的顶部:</ p>

 名称空间控制器; 
</ code> </ pre>

并将 index.php </ code>中的 $ app-&gt; get()</ code>更改为:</ p>

  $ app-&gt;  get('/ user / test','Controllers \ UserController:test'); 
</ code> </ pre>
</ div>

展开原文

原文

It seems that your namespace is define improperly. In your composer.json, class UserController under the namespace Controllers.

you should define a namespace at the top of your UserController.php:

namespace Controllers;

and change $app->get() in your index.php to:

$app->get('/user/test', 'Controllers\UserController:test');

duanjumie8753
duanjumie8753 Yeyyyyy,作品。 谢谢@tcPeng。
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐