Laravel 4:带前缀的资源控制器

时间:2013-08-05 23:36:24

标签: php laravel laravel-4

在我的route.php中我有:

Route::group(array('prefix'=>'admin'),function(){
     Route::resource('products','AdminProductsController');
});

但是当我执行STORE函数时,它会抛出一个MethodNotAllowedHttpException,但它适用于所有GET函数。

我的表单action的值为{{ URL::to('admin/products/store') }}

AdminProductsController.php位于controller/admin目录。

请帮忙。

控制器:

<?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)
{
    //
}

}

2 个答案:

答案 0 :(得分:1)

诀窍在于你的例子中使用的路线。

试试这个

<form method="post" action="{{ URL::route('admin.products.store') }}">

现在你应该好好去!

建议:看看Laravel中的url / actions / named路由 - 可能很有用。

答案 1 :(得分:0)

Laravel docs开始,store操作通过Controller的根路径访问(在您的情况下为/admin/products),但由POST动词触发,而不是GET,它会触发index操作。

换句话说,如果您在$url操作中将action设置为表单create()

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;
}

那就应该工作。 :)

查看上面该链接中Verb | Path | Action | Route Name的表格了解详情。 path列显示了您可以访问操作的位置。