Laravel 5.0 |更改默认操作'名称不适用于资源控制器

时间:2015-03-25 11:59:21

标签: laravel routes resources

我在route.php文件中创建了一个productController资源,如下所示: -

Route::resource('products','ProductController',['names' => ['create' => 'products.add']]);

以下是我的productController.php文件的样子: -

<?php namespace lvtest\Http\Controllers;

use lvtest\Http\Requests;
use lvtest\Product;
use lvtest\Http\Controllers\Controller;

use Illuminate\Http\Request;

class ProductController extends Controller {


/**
* Class constructor .. requires authentication
*/

public function __construct()
{
$this->middleware('auth');
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
$products = Product::all();
return view('products.productsList', ['products' => $products]);
}

/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function add()
{
return 'Add a product';
}

/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
return 'store new product?';
}

/**
* Display the specified resource.
*
* @param  int  $id
* @return Response
*/
public function show($id = null)
{
// $products = Product::all();
// print_r($products);
}

/**
* Show the form for editing the specified resource.
*
* @param  int  $id
* @return Response
*/
public function edit($id)
{
//
}

/**
* Update the specified resource in storage.
*
* @param  int  $id
* @return Response
*/
public function update($id)
{
return 'store new product?';
}

/**
* Remove the specified resource from storage.
*
* @param  int  $id
* @return Response
*/
public function destroy($id)
{
//
}

}

并传递'names'数组,将创建方法的默认名称更改为添加。 当我去localhost:8000 / products / add我得到一个空白页面。 我该如何解决这个

1 个答案:

答案 0 :(得分:2)

['names' => ['create' => 'products.add']添加到资源路由只会更改路由名称,而不会更改路由方法。这意味着您可以将您的路线称为route('products.add'),并指向控制器上的create()方法。

当您使用Route::resource时,Laravel会希望您的控制器上有create()方法。为了能够执行您的建议,您可能需要将方法添加到控制器,然后添加单独的路径:

Route::resource('products','ProductController');
Route::get('products/add', ['as' => 'products.add', 'uses' => 'ProductController@add']);