3

I'm currently working on api jwt based authentication off a boiler plate on SitePoint. So far I've gotten everything working but I'm stuck on this point.

My Controller looks like this:

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;

in the body I have this function:

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

Under my api route I have this in a middleware:

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

When I run this in postman I get the following error: "message": "Class 'App\Api\V1\Controllers\App\Order' not found",

I've tried everything I can think of and it still keeps happening. When I take it out of the controller and run it directly in the routes it works. I'm a newbie to Laravel and PHP so I'm kinda of stuck.

1
  • $orders = \App\Order::first(); try it Commented Apr 29, 2017 at 0:39

1 Answer 1

1

All thing below assusing that you want to invoke the App\Order::first();

In function checkThis , you can replace App\Order::first() by

Order::first() //aliasing version

or replace App\Order::first() by

\App\Order::first(); //fully qualified Name version

By 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;

Notice that

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

another php manual

and Inside a namespace, when PHP encounters an unqualified Name in a class name, function or constant context, it resolves these with different priorities. Class names always resolve to the current namespace name. Thus to access internal or non-namespaced user classes, one must refer to them with their fully qualified Name

php manual : fully qualified Name

Fully qualified name

This is an identifier with a namespace separator that begins with a namespace separator, such as \Foo\Bar. The namespace \Foo is also a fully qualified name.

So if you want to invoke the function App\Order::first ,just Order::first,for the reason that

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

the aliasing is Order instead of App\Order . And the Fully qualified name is \App\Order instead of App\Order.

On the other hand , when you invoke App\Order::first(); it means that you are invoking

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

So it can't not find the class;

Here is my demo

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 

when i run command php file2.php it echo i am first

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.