Actualmente estoy trabajando en la autenticación basada en api jwt de una placa de caldera en SitePoint. Hasta ahora he conseguido que todo funcione, pero estoy atascado en este punto.
Mi controlador se ve así:
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;en el cuerpo tengo esta función:
public function checkThis() { $currentUser = JWTAuth::parseToken()->authenticate(); $orders = App\Order::first(); echo $orders; function() { echo "stll here"; }; }Bajo mi ruta api tengo esto en un middleware:
$api->get('orderlist', 'App\\Api\\V1\\Controllers\\OrderController@checkThis');Cuando ejecuto esto en cartero, aparece el siguiente error: "mensaje": "Clase 'App\Api\V1\Controllers\App\Order' no encontrada",
He probado todo lo que se me ocurre y sigue pasando. Cuando lo saco del controlador y lo ejecuto directamente en las rutas, funciona. Soy un novato en Laravel y PHP, así que estoy un poco atascado.
Todo lo siguiente supone que desea invocar App\Order::first();
En la función checkThis , puede reemplazar App\Order::first() por
Orden::primero() //versión de alias
o reemplace App\Order::first() por
\Aplicación\Orden::primero(); //Versión de nombre completamente calificada
por manual de php
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;Darse cuenta de
// this is the same as use My\Full\NSname as NSname <-- very important use My\Full\NSname;y Dentro de un espacio de nombres, cuando PHP encuentra un Nombre no calificado en un nombre de clase, función o contexto constante, los resuelve con diferentes prioridades. Los nombres de clase siempre se resuelven en el nombre del espacio de nombres actual. Por lo tanto, para acceder a las clases de usuario internas o sin espacios de nombres, se debe hacer referencia a ellas con su Nombre completo.
manual de php: Nombre completamente calificado
Nombre completamente calificado
Este es un identificador con un separador de espacio de nombres que comienza con un separador de espacio de nombres, como \Foo\Bar. El espacio de nombres \Foo también es un nombre completo.
Entonces, si desea invocar la función App\Order ::first, solo Order::first , por la razón de que
use App\Order; equal use App\Order as Order ;el alias es Order en lugar de App\Order . Y el nombre completo es \App\Order en lugar de App\Order .
Por otro lado, cuando invocas App\Order::first(); significa que estas invocando
App\Api\V1\Controllers\App\Order::first();Entonces no puede no encontrar la clase;
Aquí está mi demostración
archivo1.php
<?php namespace App; class Order{ public static function first(){ echo "i am first"; } }archivo2.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 placecuando ejecuto el comando php file2.php se repite soy el primero