我目前正在使用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的新手,所以我有点卡住了。
答案 0 :(得分:1)
以下所有内容都在于您要调用 App \ Order :: first();
在功能 checkThis 中,您可以通过
替换 App \ Order :: first()Order :: first()//别名版本
或
替换 App \ Order :: first()\应用\订单::第一(); //完全限定名称版本
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;
和命名空间内部,当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 时 它回应我是第一个