Laravel "Method [index] does not exist." - php

+--------+----------+-------------------------+-------+--------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-------------------------+-------+--------------------------------------------------------+--------------+
| | GET|HEAD | / | | App\Http\Controllers\HomeController#index | web,auth |
| | POST | / | | App\Http\Controllers\HomeController#newsSubmit | web |
| | POST | announcement/get/fields | | App\Http\Controllers\HomeController#newsGetFields | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | login | login | App\Http\Controllers\UserController#login | web |
| | POST | login/user | | App\Http\Controllers\UserController#loginUser | web |
| | POST | notifications/get | | App\Http\Controllers\notificationsController#getNotif | web |
| | POST | notifications/read | | App\Http\Controllers\notificationsController#readNotif | web |
| | GET|HEAD | notifications/view | | App\Http\Controllers\notificationsController#index | web |
| | GET|HEAD | register | | App\Http\Controllers\UserController#register | web |
| | POST | register/user | | App\Http\Controllers\UserController#registerUser | web |
+--------+----------+-------------------------+-------+--------------------------------------------------------+--------------+
Those are all my routes:
//notifications
Route::post('/notifications/get', 'notificationsController#getNotif');
Route::post('/notifications/read', 'notificationsController#readNotif');
Route::get('/notifications/view', 'notificationsController#index');
And this is my controller:
<?php
namespace App\Http\Controllers;
use App\notifications;
use Illuminate\Http\Request;
class notificationsController extends Controller
{
public function getNotif(Request $request)
{
$id = $request->input('id');
$notifResult = notifications::orderBy('id', 'desc')->where('userID', '=', $id)->where('readed', '=', 0)->get();
$data = array(
'notifResult' => $notifResult,
'notifNumber' => count($notifResult)
);
return $data;
}
public function readNotif(Request $request)
{
$notifid = $request->input('id');
$findNotif = notifications::findOrFail($notifid);
$findNotif->readed = 1;
$findNotif->save();
}
public function index()
{
return view('notifications');
}
}
Only the index one is not working.
I am trying to display all the notifications when clicking on "View all", View all would take the user to /notifications/view which works but when I get there, I get the "Method [index] does not exist." error, and that is, I assume public function index().
SOLVED
I forgot to save the file....

Tried to clear your view and simple cache. It could be due to cache.

Related

Laravel 8 getting ReflectionException error

in Laravel 7 which i installed and i used nWdart module, i didn't have any problem. now after migrating project to Laravel 8 i have some issue which one of them is i get ReflectionException error
when i try to running php artisan route:list i get below error:
1 [internal]:0
Illuminate\Foundation\Console\RouteListCommand::Illuminate\Foundation\Console\{closure}(Object(Illuminate\Routing\Route))
2 C:\xampp\htdocs\v8\vendor\laravel\framework\src\Illuminate\Container\Container.php:809
ReflectionException::
("Class Modules\Media\Http\Controllers\Modules\Media\Http\Controllers\Modules\Media\Http\Controllers\ImagesController does not exist")
php artisan module:list command output:
+-------------+---------+-------+----------------------------------------+
| Name | Status | Order | Path |
+-------------+---------+-------+----------------------------------------+
| Blog | Enabled | | C:\xampp\htdocs\v8\Modules/Blog |
| Media | Enabled | | C:\xampp\htdocs\v8\Modules/Media |
| Profile | Enabled | | C:\xampp\htdocs\v8\Modules/Profile |
| Radio | Enabled | | C:\xampp\htdocs\v8\Modules/Radio |
| Store | Enabled | | C:\xampp\htdocs\v8\Modules/Store |
| Ticket | Enabled | | C:\xampp\htdocs\v8\Modules/Ticket |
| UserMessage | Enabled | | C:\xampp\htdocs\v8\Modules/UserMessage |
+-------------+---------+-------+----------------------------------------+
and my routes:
<?php
use Illuminate\Support\Facades\Route;
use Modules\Media\Http\Controllers\ImagesController;
Route::prefix('panel')->group(function () {
Route::prefix('media')->group(function () {
Route::prefix('mediaResource')->group(function () {
Route::resource('imagesController', ImagesController::class);
...
});
});
});
ImagesController class:
<?php
namespace Modules\Media\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
class ImagesController extends Controller
{
public function index()
{
}
//...
public function destroy($id)
{
}
}
| panel/media/mediaResource/imagesController | imagesController.store |
Modules\Media\Http\Controllers\ImagesController#store | web |
| | GET|HEAD | panel/media/mediaResource/imagesController | imagesController.index |
Modules\Media\Http\Controllers\ImagesController#index | web |
| | GET|HEAD | panel/media/mediaResource/imagesController/create | imagesController.create |
Modules\Media\Http\Controllers\ImagesController#create | web |
| | DELETE | panel/media/mediaResource/imagesController/{imagesController}| imagesController.destroy |
Modules\Media\Http\Controllers\ImagesController#destroy| web |
| | PUT|PATCH | panel/media/mediaResource/imagesController/{imagesController}| imagesController.update |
Modules\Media\Http\Controllers\ImagesController#update | web |
| | GET|HEAD | panel/media/mediaResource/imagesController/{imagesController}| imagesController.show |
Modules\Media\Http\Controllers\ImagesController#show | web |
| | GET|HEAD | panel/media/mediaResource/imagesController/{imagesController}/edit | imagesController.edit

laravel route::resource can't find edit function in my controller

When I call my edit function I get a 404|not found page.
this is the code in my View
<a href="{{ route('admin.edit', $user->id) }}">
<button type="button" class="btn btn-primary btn-sm crudbtn">Edit</button>
</a>
This is the code in my web.php
route::namespace('Admin')->prefix('admin')->middleware(['auth', 'auth.admin'])->name('admin.')->group(function(){
route::resource('/', 'AdminController');
});
This is my edit function in my AdminController
public function edit($id)
{
if(Auth::user()->id == $id){
return redirect()->route('admin.index');
}
return view('admin.edit')->with(['user' => user::find($id), 'roles' => Role::all()]);
}
And this is the output of my php artisan route:list
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+---------------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+---------------------+
| | GET|HEAD | / | | Closure | web |
| | POST | admin | admin.store | App\Http\Controllers\Admin\AdminController#store | web,auth,auth.admin |
| | GET|HEAD | admin | admin.index | App\Http\Controllers\Admin\AdminController#index | web,auth,auth.admin |
| | GET|HEAD | admin/create | admin.create | App\Http\Controllers\Admin\AdminController#create | web,auth,auth.admin |
| | DELETE | admin/{} | admin.destroy | App\Http\Controllers\Admin\AdminController#destroy | web,auth,auth.admin |
| | PUT|PATCH | admin/{} | admin.update | App\Http\Controllers\Admin\AdminController#update | web,auth,auth.admin |
| | GET|HEAD | admin/{} | admin.show | App\Http\Controllers\Admin\AdminController#show | web,auth,auth.admin |
| | GET|HEAD | admin/{}/edit | admin.edit | App\Http\Controllers\Admin\AdminController#edit | web,auth,auth.admin |
When i call my index function the proper page is loaded, but I can't figure out why my edit function cant' be found. What am I missing or doing wrong?
Try
route::namespace('Admin')->middleware(['auth', 'auth.admin'])->group(function(){
route::resource('admin', 'AdminController');
});

Nested Resource : Missing required parameters (laravel)

I am quite new to Laravel, and to be honest - It is a great framework. I am however, a bit confused about some nested resources - including CRUD'ing them.
For routes I am using
Route::resource('startups','StartupsController');
Route::resource('startups.usecases','UsecasesController');
php artisan route:list
| | GET|HEAD | admin/startups | admin.startups.index | App\Http\Controllers\StartupsController#index | web,admin,auth:admin |
| | POST | admin/startups | admin.startups.store | App\Http\Controllers\StartupsController#store | web,admin,auth:admin |
| | GET|HEAD | admin/startups/create | admin.startups.create | App\Http\Controllers\StartupsController#create | web,admin,auth:admin |
| | DELETE | admin/startups/{startup} | admin.startups.destroy | App\Http\Controllers\StartupsController#destroy | web,admin,auth:admin |
| | GET|HEAD | admin/startups/{startup} | admin.startups.show | App\Http\Controllers\StartupsController#show | web,admin,auth:admin |
| | PUT|PATCH | admin/startups/{startup} | admin.startups.update | App\Http\Controllers\StartupsController#update | web,admin,auth:admin |
| | GET|HEAD | admin/startups/{startup}/edit | admin.startups.edit | App\Http\Controllers\StartupsController#edit | web,admin,auth:admin |
| | GET|HEAD | admin/startups/{startup}/usecases | admin.startups.usecases.index | App\Http\Controllers\UsecasesController#index | web,admin,auth:admin |
| | POST | admin/startups/{startup}/usecases | admin.startups.usecases.store | App\Http\Controllers\UsecasesController#store | web,admin,auth:admin |
| | GET|HEAD | admin/startups/{startup}/usecases/create | admin.startups.usecases.create | App\Http\Controllers\UsecasesController#create | web,admin,auth:admin |
| | DELETE | admin/startups/{startup}/usecases/{usecase} | admin.startups.usecases.destroy | App\Http\Controllers\UsecasesController#destroy | web,admin,auth:admin |
| | GET|HEAD | admin/startups/{startup}/usecases/{usecase} | admin.startups.usecases.show | App\Http\Controllers\UsecasesController#show | web,admin,auth:admin |
| | PUT|PATCH | admin/startups/{startup}/usecases/{usecase} | admin.startups.usecases.update | App\Http\Controllers\UsecasesController#update | web,admin,auth:admin |
| | GET|HEAD | admin/startups/{startup}/usecases/{usecase}/edit | admin.startups.usecases.edit | App\Http\Controllers\UsecasesController#edit | web,admin,auth:admin |
For the parent, here called "startups", everything is fine, i can CRUD everything just fine.
For the child, here called "usecases", index, create, and store are fine. The moment I try to add a link to the edit, delete, or show within my templates I start getting : Missing required parameters for [Route: admin.startups.usecases.destroy] [URI: admin/startups/{startup}/usecases/{usecase}].
A link in my index blade file :
<li>Show</li>
returns that error.
In my UsecasesController
public function show($startup_id, $usecase_id)
{
$startups = $startup_id;
$usecase = Usecase::find($usecase_id);
return view('admin.startups.usecases.show')
->with('usecase', $usecase)
->with('startups', $startups);
}
TLDR: I can access and CRUD everything on parent, "startups". I can create and store for the child, but not edit, show, or delete - for "usecases".
Your help is appreciated.
You need to pass parameters as an array:
route('admin.startups.usecases.show', [$startup->id, $usecase->id])
And show() method will look like this:
public function show($startup, $usecase)
{
....

Can't call to model

Vehicle.php ( app\Vehicle.php file )
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Vehicles extends Model
{
protected $primaryKey = 'serie';
protected $fillable = ['serie', 'color', 'power', 'capacity', 'speed'];
protected $hidden = ['serie'];
public function maker()
{
return $this->belongsTo('Maker');
}
}
VehicleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Vehicle;
class VehicleController extends Controller
{
public function index()
{
$vehicles = Vehicle::all();
return response()->json(['data'=> $vehicles], 200);
}
}
Below is my route list
| Domain | Method | URI | Name | Action
| Middleware |
+--------+-----------+-----------------------------------+------------------------+-------------------------------------
-----------------+------------+
| | GET|HEAD | makers | makers.index | App\Http\Controllers\MakerController
#index | web |
| | POST | makers | makers.store | App\Http\Controllers\MakerController
#store | web |
| | PUT|PATCH | makers/{makers} | makers.update | App\Http\Controllers\MakerController
#update | web |
| | DELETE | makers/{makers} | makers.destroy | App\Http\Controllers\MakerController
#destroy | web |
| | GET|HEAD | makers/{makers} | makers.show | App\Http\Controllers\MakerController
#show | web |
| | POST | makers/{makers}/vehicle | makers.vehicle.store | App\Http\Controllers\MakersVehicleCo
ntroller#store | web |
| | GET|HEAD | makers/{makers}/vehicle | makers.vehicle.index | App\Http\Controllers\MakersVehicleCo
ntroller#index | web |
| | PUT|PATCH | makers/{makers}/vehicle/{vehicle} | makers.vehicle.update | App\Http\Controllers\MakersVehicleCo
ntroller#update | web |
| | GET|HEAD | makers/{makers}/vehicle/{vehicle} | makers.vehicle.show | App\Http\Controllers\MakersVehicleCo
ntroller#show | web |
| | DELETE | makers/{makers}/vehicle/{vehicle} | makers.vehicle.destroy | App\Http\Controllers\MakersVehicleCo
ntroller#destroy | web |
| | GET|HEAD | vehicles | vehicles.index | App\Http\Controllers\VehicleControll
er#index | web |
+--------+-----------+-----------------------------------+------------------------+-------------------------------------
when I call to myapp.com/vehicles, it show me 'Class 'App\Vehicle' not found' error. I have also Maker controller and Maker model. I can call myapp.com/makers and it also return properly. Please point me where is my weakness.
You named your class Vehicles not Vehicle. You should name it Vehicle make sure it is Vehicle.php and you will be fine.
The relationship should have the Fully Qualified Class Name in it as well:
public function maker()
{
return $this->belongsTo('App\Maker');
// or
return $this->belongsTo(Maker::class);
// assuming they are in the same namespace
}

Resource controller returns not found exception on show

In Laravel I have a route as follows:
Route::resource('/admin/products/', 'ProductsController');
So if I go to myapp.app:8000/admin/products/ I get all the products:
public function index()
{
$products = Product::all();
return View::make('products.index', compact('products'));
}
But if I go to myapp.app:8000/admin/products/1 where I have the following:
public function show($id)
{
return "Hi!";
}
I get an error page: NotFoundHttpException. Have I done something wrong?
In case it helps, I have attached my php artisan routes output for the relevant queries:
+--------+---------------------------------+-------------------------+-----------------------------------------+----------------+---------------+
| Domain | URI | Name | Action | Before Filters | After Filters |
+--------+---------------------------------+-------------------------+-----------------------------------------+----------------+---------------+
| | GET|HEAD admin/users/{month?} | | AdminController#users | admin | |
| | GET|HEAD admin/products | admin.products..index | ProductsController#index | admin | |
| | GET|HEAD admin/products/create | admin.products..create | ProductsController#create | admin | |
| | POST admin/products | admin.products..store | ProductsController#store | admin | |
| | GET|HEAD admin/products/{} | admin.products..show | ProductsController#show | admin | |
| | GET|HEAD admin/products/{}/edit | admin.products..edit | ProductsController#edit
| | PUT admin/products/{} | admin.products..update | ProductsController#update | admin | |
| | PATCH admin/products/{} | | ProductsController#update | admin | |
| | DELETE admin/products/{} | admin.products..destroy | ProductsController#destroy | admin | |
Looks like it has to do with how Laravel parses the route. Change your route to:
Route::resource('admin/products', 'ProductsController');
And the list of outputs from Artisan should change to something like this:
GET|HEAD admin/products/{products}

Categories