BadMethodCallException: Method Illuminate\Routing\Route::get does not exist - laravel

I'd start a new laravel project, and want to make a controller called ProductController using Artisan, but it ends up with an error
“BadMethodCallException : Method Illuminate\Routing\Route::get does not exist.“
I'm using laravel 6.0
routes:
Route::get('/products', 'ProductController#index');
Command used:
php artisan make:controller ProductController

Import the Route facade instead of Illuminate\Routing\Route
use Illuminate\Support\Facades\Route;

you maybe
use
href="{{route('--')}}"
instead of
href="{{url('---')}}"
for routing in your blade , just change it to href="{{url('---')}}"

Related

Error message comes when trying to view template using controller

I am new to laravel and use the laravel 9.37v version. I have the following error message.
I created a blade template. I could view that blade template using view but after I tried to view that template using the controller I got this error message.
Target class [PagerConntroller] does not exist
Please check the spelling, if it is correct try to import the controller class in the Route. Im assuming the controller name is PagerConntroller and the function that you need to call is index so your web.php or api.php should be like :
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PagerConntroller;
Route::get('view',[PagerConntroller::class, 'index']);
Or else you can use the controllers without importing by simply uncommenting the namespace variable inside app/Providers/RouteServiceProvider.php line:29 the variable will look like protected $namespace = 'App\\Http\\Controllers'; then your route file should be like
<?php
use Illuminate\Support\Facades\Route;
Route::get('view','PagerConntroller#index');
If you tried both the ways and still the error persists kindly check your class name and the namespace as well

Laravel: "$ php artisan route:list" does not show route list in App\Http\Controllers\API

I created a UserController inside
app/Http/Controllers/API/UserController.php
Inside the UserController.php I have this
namespace App\Http\Controllers\API;
Inside the api.php I have this
Route::apiResources(['user' => 'API\UserController']);
I get this error below when I try to display the route list.
Error: Target class [App\Http\Controllers\UserController] does not
exist.
How do we tell Laravel that the UserController is inside app/Http/Controllers/API?
You need to defined the namespace, so laravel can find the controller:
<?php
namespace App\Http\Controllers\API;
...
class UserController extends Controller {
You have already defined the api.php with namespace API:
Route::apiResources(['user' => 'API\UserController']);
Try to clear the routes cache:
php artisan route:clear
php artisan optimize
Have you checked that the path you specify is correct ?
and you could also check the namespace in the UserController, correspond to:
namespace App\Http\Controllers\API ?
Or also you can simply add the controllers in the wep / api routes :
Route::get('prefix', 'DirOfYourController\YourController#SomeFunction);
Or as stated on the documentation you could take a look here:
https://laravel.com/docs/master/routing#route-group-namespaces
Well it's definitely because one of your web.php or api.php file
make sure that namespace of the file is correct in there for instance
Route::get('foo', 'API\UserController');
You need to follow only 2 steps to achieve the same:
Step1:
Define the correct name space in your UserController as below
namespace App\Http\Controllers\API;
Step2: Define route with directory name in your web.php for eg.
Route::get('dashboard', 'API\UserController#dashboard');

Unable to prepare route[api/user] for serialisation. Uses Closure - Laravel

LogicException : Unable to prepare route [api/user] for serialization. Uses Closure.
at /var/www/html/dev_laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php:917
913| */
914| public function prepareForSerialization()
915| {
916| if ($this->action[&apos;uses&apos;] instanceof Closure) {
> 917| throw new LogicException("Unable to prepare route [{$this->uri}] for serialization. Uses Closure.");
918| }
919|
920| $this->compileRoute();
921|
Exception trace:
1 Illuminate\Routing\Route::prepareForSerialization()
/var/www/html/dev_laravel/vendor/laravel/framework/src/Illuminate/Foundation/Console/RouteCacheCommand.php:62
2 Illuminate\Foundation\Console\RouteCacheCommand::handle()
/var/www/html/dev_laravel/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:32
When i trying to run the laravel command
php artisan route:cache
I try to find out the solution but not get the correct solution.
https://github.com/laravel/framework/issues/22034
Is this laravel bug still or fixed the bug?
I have the code on web.php file
Route::get('/', function () {
return view('welcome');
});
Route::resource('photos', 'PhotoController#index');
I'm Using Laravel 5.8. Just installed and migrated database. I'm beginner for laravel.
Can anyone let me know the correct solution?
Thanks in advance
It is not a bug. You can not use Closure based routes like that if you want to cache the routes. Direct any Closure based route to a Controller method instead and you will be fine. [You have one in web.php and the error is pointing out one in api.php]
The Closure based route you have in web.php could be replaced with:
Route::view('/', 'welcome');
This would direct it to a Controller that just handles returning view files.
The Closure based route in api.php should point to a Controller:
Route::middleware('auth:api')->get('user', 'SomeController#user');
Consider any routes that come with the laravel/laravel project as being functional but are there for demonstration purposes.
"Closure based routes cannot be cached. To use route caching, you must convert any Closure routes to controller classes."
Laravel 5.8 - Docs - Controllers - Route Caching
EDIT:
AS OF LARAVEL 8.X YOU CAN ALSO CACHE CLOSURE BASED ROUTES
When you run the command php artisan route:cache
Laravel will cache all your routes and store it in specified Cache Driver
Now Comming to your Error Message:
As the error Message Clearly Says that
Closure Routes can't be Cached
And even the Laravel Docs says that Route Caching
By Default Laravel Comes with Four routes files
And this will have 2 Closure based routes
Solution:
You can remove them if you no longer using that routes
Make a Controller and Move that to Controller
LogicException : Unable to prepare route [api/user]
Which means that
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
This Code in Your routes/api.php is causing the issue So
Route::middleware('auth:api')
->get('/user', 'SomeController#method');
Or you can remove that if not using that
You could not use specific method when you use resource for the routing.
You can use
Route::resource('photos', 'PhotoController');
Or
Route::get('photos', 'PhotoController#index');

Datattables Laravel 5.4 - FatalThrowableError Call to undefined function App\Http\Controllers\Datatables()

I'm using datatables with laravel 5.4, but when I use the datatables()->query():
in providers: Yajra\Datatables\DatatablesServiceProvider::class,
in aliases: 'Datatables' => Yajra\Datatables\Facades\Datatables::class,
My code:
return Datatables()->query( /**query**/ )
return this error in my console:
FatalThrowableError
App\Http\Controllers\Datatables()
I've tried datatables() and Datatables()
Someone with the same problem?
This error happens because Laravel cannot find your package Datatables.
Laravel in controllers, if you are not mapping your classes correctly will always seek the called classes at this point App\Http\Controllers.
Just put use DataTables; or use \Yajra\Datatables\Datatables; at the start of your controller and it shall be fixed. documentation
When you install any package through composer, composer uses namespace to find the package and route functions and classes to it.
you can read more about the namespaces from php.
and you can check this tutorial for namespaces.
Also, Laravel follows the PSR 4 when it comes to autoloading, you can check it from here

cant create laravel usercontroller

usually when I want to create controller I use php artisan
php artisan make:controller UserController
but in this case I have error in my terminal
[Symfony\Component\Debug\Exception\FatalThrowableError]
Class 'User' not found
and I wanna use it for users page - update and display users, as well as route
Route::resource('/user', 'UserController');
should I use it like that or something else? and why do I get error?
You get this error because you've used User class somewhere in the code (some controller probably). Find out where did you used it and add this clause to the top of that class:
use App\User;
Or just use full namespace, for example:
\App\User::get();

Resources