In my home.blade.php I have the below code
<a href="{{ route('tasks.index') }}" class="btn btn-info">View Tasks</a>
<a href="{{ route('tasks.create') }}" class="btn btn-primary">Add New Task</a>
then in the routes.php I have the following,
Route::get('/', [
'as' => 'home',
'uses' => 'PagesController@home'
]);
Route::get('/index', [
'as' => 'index',
'uses' => 'TasksController@index'
]);
Route::get('/create', [
'as' => 'create',
'uses' => 'TasksController@create'
]);
Why am I having this error for http://localhost:8000/
Route [tasks.index] not defined. (View: D:\wamp\www\test1esources\views\pages\home.blade.php)
The error
Route [tasks.index] not defined. (View: D:\wamp\www\test1esources\views\pages\home.blade.php)
It's because you've named it index
not tasks.index
, so either change the name from index
to task.index
in route declaration or use index
when referencing the route in your href
attribute. Now you have this:
Route::get('/index', [
'as' => 'index', // index is the name here so use the name as it is
'uses' => 'TasksController@index'
]);
Same for tasks.create
:
Route::get('/create', [
'as' => 'create', // Name is "create" not "tasks.create"
'uses' => 'TasksController@create'
]);
It would be better if you use a group for naming like (For V-5.1 and greater):
Route::group(['as' => 'tasks.'], function () {
Route::get('/index', [
'as' => 'index', // Now you can usee 'tasks.index'
'uses' => 'TasksController@index'
]);
Route::get('/create', [
'as' => 'create', // Now you can usee 'tasks.create'
'uses' => 'TasksController@create'
]);
});
The error is because Laravel couldn't find any routes named tasks.index
or tasks.create
. This is because you named your routes as index
and create
and home
.
So if you want a link to point to the URL: /tasks
, you have to link to that route using it's name.
ie: the url will be route('index')
. This is taken from the route:
As you can see from the routes.php
file, 'as'=>'index'
is the name of the route and this is what you should call.
So the link become:
<a href="{{ route('index') }}" class="btn btn-info">View Tasks</a>
<a href="{{ route('create') }}" class="btn btn-info">CreateTasks</a>
As The Alpha said it's better to group the routes. Also you can chain methods like this
Route::group(['as' => 'tasks.'], function ()
{
Route::get('/index', 'TasksController@index')->name(index);
Route::get('/create', 'TasksController@create')->name(create);
});
After defining the routes this was you can use route function
{{ route('tasks.index') }}
{{ route('tasks.create') }}
Or if you prefer not to group the routes you can do like this:
Route::get('/index', 'TasksController@index')->name(tasks.index);
Route::get('/create', 'TasksController@create')->name(tasks.create);
Now you can use :
<a href="{{ route('tasks.index') }}" class="btn btn-info">View Tasks</a>
<a href="{{ route('tasks.create') }}" class="btn btn-primary">Add New Task</a>
You can see what routes you have and their names running this command in the project folder:
php artisan route:list