【问题标题】:Laravel api route class to found errorLaravel api 路由类发现错误
【发布时间】:2017-09-27 04:27:02
【问题描述】:

我目前正在对 SitePoint 上的样板进行基于 api jwt 的身份验证。到目前为止,我已经完成了所有工作,但我一直坚持这一点。

我的控制器如下所示:

namespace App\Api\V1\Controllers;

use Illuminate\Http\Request;
use Dingo\Api\Routing\Helpers;

use Symfony\Component\HttpKernel\Exception\HttpException;
use JWTAuth;
use App\Http\Controllers\Controller;
use App\Order;
// use App\Api\V1\Requests\LoginRequest;
use Tymon\JWTAuth\Exceptions\JWTException;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;

在体内我有这个功能:

  public function checkThis()
  {
    $currentUser = JWTAuth::parseToken()->authenticate();
    $orders = App\Order::first();
    echo $orders;
    function() {
    echo "stll here";
    };
  }

在我的 api 路由下,我在中间件中有这个:

$api->get('orderlist', 'App\\Api\\V1\\Controllers\\OrderController@checkThis');

当我在邮递员中运行时,我收到以下错误:“消息”:“找不到类 'App\Api\V1\Controllers\App\Order'”,

我已经尝试了所有我能想到的方法,但它仍然在不断发生。当我将它从控制器中取出并直接在它工作的路线中运行时。我是 Laravel 和 PHP 的新手,所以我有点卡住了。

【问题讨论】:

  • $orders = \App\Order::first();试试看

标签: php namespaces laravel-5.3


【解决方案1】:

下面的所有内容都表明您要调用 App\Order::first();

checkThis 函数中,您可以将 App\Order::first() 替换为

Order::first() //别名版本

或将 App\Order::first() 替换为

\App\Order::first(); //完全限定名称版本

php manual

Example #1 importing/aliasing with the use operator
<?php
namespace foo;
use My\Full\Classname as Another;

// this is the same as use My\Full\NSname as NSname   <-- very important 
use My\Full\NSname;

请注意

// this is the same as use My\Full\NSname as NSname   <-- very important 
    use My\Full\NSname;

another php manual

and 在命名空间内,当 PHP 在 类名、函数或常量上下文,它用 不同的优先事项。类名总是解析为当前 命名空间名称。从而访问内部或非命名空间用户 类,必须以其完全限定的名称引用它们

php manual : fully qualified Name

全名

这是一个带有以命名空间分隔符开头的命名空间分隔符的标识符,例如 \Foo\Bar。命名空间 \Foo 也是一个 完全限定名称。

所以如果你想调用 App\Order::first 函数,只需 Order::first因为

use App\Order;     
equal 
use App\Order as Order ;

别名是 Order 而不是 App\Order完全限定名称\App\Order 而不是 App\Order

另一方面,当您调用 App\Order::first(); 这意味着您正在调用

App\Api\V1\Controllers\App\Order::first();

所以找不到类;

这是我的演示

file1.php

<?php
namespace App;
class  Order{
public static function   first(){
echo "i am first";
  }
}

file2.php

<?php
namespace App\Api\V1\Controllers;
include 'file1.php';

use App\Order ;
\App\Order::first();
// and you can do it by 
//  Order::first();  they are equal in this place 

当我运行命令 php file2.php 它呼应我是第一

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2014-10-02
    • 2015-09-25
    相关资源
    最近更新 更多