Laravel api路由类发现错误

时间:2017-04-29 00:27:20

标签: php namespaces laravel-5.3

我目前正在使用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');

当我在邮递员中运行时,我收到以下错误:" message":" Class' App \ Api \ V1 \ Controllers \ App \ Order'找不到",

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

1 个答案:

答案 0 :(得分:1)

以下所有内容都在于您要调用 App \ Order :: first();

在功能 checkThis 中,您可以通过

替换 App \ Order :: first()
  

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

  

和命名空间内部,当PHP在a中遇到非限定名称时   类名,函数或常量上下文,它解析这些   不同的重点。类名始终解析为当前   名称空间名称因此,访问内部或非命名空间的用户   类,一个必须使用完全限定的名称

来引用它们

php manual : fully qualified Name

  

完全限定名称

     

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

因此,如果您想首先调用 App \ Order ::函数,只需订单::第一个,原因是 < / p>

use App\Order;     
equal 
use App\Order as 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 时 它回应我是第一个