Jahid26 Jahid26 - 3 months ago 11
PHP Question

Laravel Post Controller Method and PostController not Working

My Laravel blog project the get method of postcontroller is working but post method is not working. I redirect The Post Method. But Accordind to my my code it should return to my Admin page.My Controller Code is

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

use App\Post;
use App\Category;

class PostController extends Controller
{

public function getBlogIndex() {
return view('frontend.blog.index');
}

public function getSinglePost($post_id,$end='frontend') {
return view($end . '.blog.single');
}

public function getCreatePost() {
return view('admin.blog.create_post');
}

public function postCreatePost(Request $request ) {
$this->validate($request, [
'title' => 'required|max:120|unique:posts',
'author' => 'required|max:80',
'body' => 'required'
]);

$post = new Post();
$post->title = $request['title'];
$post->author = $request['author'];
$post->body = $request['body'];
$post->save();

return redirect()->route('admin.index')->with(['success' => 'Post Successfully Created']);
}
}


My Routes file

<?php


Route::group(['middleware' => ['web']], function () {

Route::group([
'prefix' =>'/admin'
], function() {
Route::get('/', [
'uses' => 'AdminController@getIndex',
'as' => 'admin.index'
]);

Route::get('/blog/posts/create', [
'uses' => 'PostController@getCreatePost',
'as' => 'admin.blog.create_post'
]);

Route::get('/blog/post/create', [
'uses' => 'PostController@postCreatePost',
'as' => 'admin.blog.post.create'
]);
});
});


My form is

@extends('layouts.admin-master')

@section('styles')
{!! Html::style('src/css/form.css') !!}

@endsection

@section('content')
<div class="container">
@include('includes.info-box')
<form action="{{ route('admin.blog.post.create') }}" method="post">
<div class="input-group">
<label for="title">Title</label>
<input type="text" name="title" id="title" {{ $errors->has('title') ? 'class=has-error' : '' }} value="{{ Request::old('title') }}">
</div>

<div class="input-group">
<label for="author">Author</label>
<input type="text" name="author" id="author" {{ $errors->has('author') ? 'class=has-error' : '' }} value="{{ Request::old('author') }}">
</div>

<div class="input-group">
<label for="category_select">Add Category</label>
<select name="category_select" id="category_select">
<option value="Dummy Category ID">Dummy Category</option>
</select>
<button type="button" class="btn">Add Category</button>
<div class="added-categories">
<ul></ul>
</div>
<input type="hidden" name="categories" id="categories">
</div>

<div class="input-group">
<label for="body">Body</label>
<textarea name="body" id="body" rows="12" {{ $errors->has('body') ? 'class=has-error' : '' }} >{{ Request::old('body') }}</textarea>

</div>

<button type="submit" class="btn">Create Post</button>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>
</div>
@endsection

@section('scripts')
{!! Html::script('src/js/posts.js') !!}
@endsection


When I submit My post I shows this
enter image description here

I dont find where the problem is. Plz Help Me

Answer

This is an extremely common error and a good one to look out for. Whenever you see:

MethodNotAllowedHttpException in RouteCollection.php

The very first thing you should check is your routes file to make sure you have Route::get or Route::post correctly based on what you are trying to do.

Your issue is that your form sends the data as POST, but your route is GET.

<form action="{{ route('admin.blog.post.create') }}" method="post">

and

Route::get('/blog/post/create', [
   'uses' => 'PostController@postCreatePost',
   'as' => 'admin.blog.post.create'
]);

Change that to Route::post for it to function correctly.