Reputation: 2785
In my route.php i have:
Route::group(array('prefix'=>'admin'),function(){
Route::resource('products','AdminProductsController');
});
But when I do the STORE
function which is a POST, it throws a MethodNotAllowedHttpException
but it works well for the all the GET
function.
The value of my form's action
is {{ URL::to('admin/products/store') }}
.
AdminProductsController.php is in controller/admin
directory.
Please help.
Controller:
<?php
class AdminProductsController extends BaseController {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return 'Yow';
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
$url = URL::to('admin/products/store');
return<<<qaz
<form method="post" action="{$url}">
<input type="hidden" name="hehehe" value="dfsgg" />
<input type="submit" />
</form>
qaz;
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
return 'whahaha';
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
return $id;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
return $id;
}
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
}
}
Upvotes: 2
Views: 2633
Reputation: 22862
The trick is in the Route used in your example.
Try this
<form method="post" action="{{ URL::route('admin.products.store') }}">
Now you should be good to go!
Advice: get a look at url/actions/named routes in Laravel - may be usefull.
Upvotes: 1
Reputation: 10794
From the Laravel docs, the store
action is accessed via the root path of the Controller (in your case /admin/products
), but is triggered by the POST
verb, rather than GET
, which triggers the index
action.
In other words, if you update the $url
you're setting as the form's action
in your create()
action:
public function create()
{
$url = URL::to('admin/products');
return<<<qaz
<form method="post" action="{$url}">
<input type="hidden" name="hehehe" value="dfsgg" />
<input type="submit" />
</form>
qaz;
}
And that Should Just Work. :)
Check out the table of Verb | Path | Action | Route Name
in that link above for more details. The path
column shows where you can access the actions.
Upvotes: 0