I have a controller class with this default namespace and there are some uses. But I want to use also a class that I created inside the app folder in the directory Acme/Transfomers/LessonTransformer.php.
However when I use that like:
namespace App\Http\Controllers;
use App\Models\Lesson;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Response;
use Acme\Transformers\LessonTransformer;
class LessonsController extends Controller
Here is the constructor:
class LessonsController extends Controller
{
protected $lessonTransformer;
public function __construct(LessonTransformer $lessonTransformer)
{
$this->lessonTransformer = $lessonTransformer;
}
The class Transformer:
namespace Acme\Transformers;
abstract class Transformer{
The class LessonTransformer:
namespace Acme\Transformers;
class LessonTransformer extends Transformer{
I get:
Illuminate\Contracts\Container\BindingResolutionException
Target class [Acme\Transformers\LessonTransformer] does not exist.
http://127.0.0.1:8000/api/lessons/
Do you know how to properly fix this?
CodePudding user response:
In order to recognize a new source folder named Acme You need to register the Acme in the PSR-4 autloading of composer.json :
{
...
"autoload": {
"psr-4": {
"App\\": "app/",
"Acme\\": "Acme/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
}
},
...
}
Then reload composer autoload:
$ composer dump-autoload
More information about PSR-4: https://www.php-fig.org/psr/psr-4/
