I am running Laravel 5.3.30. I am trying to create and admin section using an admin folder placing controllers and views. For some reason, I keep getting this error even though the routes are in my route file. Here is an example of Messages: I have multiple other pieces of data types such as links, users, widget and all of these that are in the admin folder are acting the same.
Messages Controller which is in app\Http\Controllers\admin\MessageController.php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Message;
use Redirect;
class MessageController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$messages = Message::all();
return view('admin.message.index', compact('messages'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.message.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|string|max:30',
'message_text' => 'required',
]);
$message = Message::create(['name' => $request->name,
'message_text' => $request->message_text,
]);
$message->save();
alert()->success('Congrats!', 'You made a Message');
return Redirect::route('admin.message.index');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$message = Message::findOrFail($id);
return view('admin.message.show', compact('message'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$message = Message::findOrFail($id);
return view('admin.message.edit', compact('message'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'name' => 'required|string|max:30',
'message_text' => 'required',
]);
$message = Message::findOrFail($id);
$message->update(['name' => $request->name,
'message_text' => $request->message_text,
]);
$message->save();
alert()->success('Congrats!', 'You updated a message');
return Redirect::route('admin.message.index');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Message::destroy($id);
alert()->overlay('Attention!', 'You deleted a message', 'error');
return Redirect::route('admin.message.index');
}
}
my Message Index View in resources\views\admin\message\index.blade.php
@extends('layouts.app')
@section('title')
<title>Messages</title>
@endsection
@section('content')
<ol class='breadcrumb'>
<li><a href='{{ url('/') }}'>Home</a></li>
<li><a href='{{ url('/') }}/admin/message'>Messages</a></li>
<li class='active'>Create</li>
</ol>
<h2>Messages</h2>
<hr/>
@if($messages->count() > 0)
<table class="table table-hover table-bordered table-striped">
<thead>
<th>Id</th>
<th>Name</th>
<th>Message</th>
<th>Date Created</th>
</thead>
<tbody>
@foreach($messages as $message)
<tr>
<td>{{ $message->id }}</td>
<td><a href="{{ url('/') }}/admin/message/{{ $message->id }}">{{ $message->name }}</a></td>
<td>{{ $message->message_text }}</td>
<td>{{ $message->created_at }}</td>
</tr>
@endforeach
</tbody>
</table>
@else
Sorry, no Messages
@endif
<div> <a href="{{ url('/') }}/admin/message/create">
<button type="button" class="btn btn-lg btn-primary">
Create New
</button></a>
</div>
@endsection
my route for Message:
Route::group(['prefix' => 'admin', 'namespace' => 'admin', 'middleware' => 'admin'], function()
{
/** Message **/
Route::resource('message', 'MessageController');
});
I have created an admin middlware and added a new column to the user table is_admin.
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Http\RedirectResponse;
class AdminAuthentication
{
protected $auth;
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($this->auth->check())
{
if ($this->auth->user()->is_admin == true)
{
return $next($request);
}
}
return new RedirectResponse(url('/'));
}
}
and added it to Kernel.hp
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'admin' => \App\Http\Middleware\AdminAuthentication::class,
];
here is a copt of my php artisan route list for messages:
| POST | admin/message | message.store | App\Http\Controllers\admin\MessageController@store | web,admin |
| | GET|HEAD | admin/message | message.index | App\Http\Controllers\admin\MessageController@index | web,admin |
| | GET|HEAD | admin/message/create | message.create | App\Http\Controllers\admin\MessageController@create | web,admin |
| | GET|HEAD | admin/message/{message} | message.show | App\Http\Controllers\admin\MessageController@show | web,admin |
| | PUT|PATCH | admin/message/{message} | message.update | App\Http\Controllers\admin\MessageController@update | web,admin |
| | DELETE | admin/message/{message} | message.destroy | App\Http\Controllers\admin\MessageController@destroy | web,admin |
| | GET|HEAD | admin/message/{message}/edit | message.edit | App\Http\Controllers\admin\MessageController@edit | web,admin |
and then the original ones are there:
| POST | api/messages | messages.store | App\Http\Controllers\MessagesapiController@store | web |
| | GET|HEAD | api/messages | messages.index | App\Http\Controllers\MessagesapiController@index | web |
| | GET|HEAD | api/messages/create | messages.create | App\Http\Controllers\MessagesapiController@create | web |
| | DELETE | api/messages/{message} | messages.destroy | App\Http\Controllers\MessagesapiController@destroy | web |
| | PUT|PATCH | api/messages/{message} | messages.update | App\Http\Controllers\MessagesapiController@update | web |
| | GET|HEAD | api/messages/{message} | messages.show | App\Http\Controllers\MessagesapiController@show | web |
| | GET|HEAD | api/messages/{message}/edit | messages.edit | App\Http\Controllers\MessagesapiController@edit | web |
so when I first created my Laravel project I did not have an admin area. I just added it. So I am thinking with the original routes and now the new admin routes the confusion is happening. So is there a command to flush out the original routes??? How do I get rid of the original routes so only my admin/messages routes are the only one.
Am I wrong in thinking that having original message routes and the admin routes are not the issue??
Any help would be greatly appreciated!!
Thanks,
Darren