【问题标题】:Unable to generate a URL无法生成 URL
【发布时间】:2013-10-07 10:29:53
【问题描述】:

我目前正在尝试在索引页面上创建一个链接,以允许用户创建项目。我的 routes.php 看起来像

Route::controller('items', 'ItemController');

我的 ItemController 看起来像

class ItemController extends BaseController
{
  // create variable
  protected $item;

  // create constructor
  public function __construct(Item $item)
  {
    $this->item = $item;
  }

  public function getIndex()
  {
    // return all the items
    $items = $this->item->all();

    return View::make('items.index', compact('items'));
  }

  public function getCreate()
  {
    return View::make('items.create');
  }

  public function postStore()
  {
    $input = Input::all();

    // checks the input with the validator rules from the Item model
    $v = Validator::make($input, Item::$rules);

    if ($v->passes())
    {
      $this->items->create($input);

      return Redirect::route('items.index');
    }

    return Redirect::route('items.create');
  }
}

我已尝试将 getIndex() 更改为仅 index(),但随后我得到一个未找到的控制器方法。所以,这就是我使用 getIndex() 的原因。

我想我已经正确设置了我的创建控制器,但是当我转到项目/创建 url 时,我得到了一个

无法为命名路由“items.store”生成 URL,因为这样的路由不存在。

错误。我试过只使用 store() 和 getStore() 而不是 postStore() 但我一直收到同样的错误。

有人知道问题可能是什么吗?我不明白为什么没有生成 URL。

【问题讨论】:

  • +1 用于发布带有您的问题的广泛的代码示例

标签: php laravel laravel-4


【解决方案1】:

据我所知,您正在使用 Route::controller() 生成路由名称。

即您指的是“items.store” - 这是一个路线名称。

你应该要么;

如果您使用 Route::resource - 那么您需要更改控制器名称

【讨论】:

  • 哦,我误读了控制器和资源。好吧,这是有道理的。谢谢!
  • 这个答案与我拥有的similar question 有什么关系,其中同一文件夹中的一个文件使用样式表函数加载,而另一个文件没有?在我的示例中,没有必要定义到样式表的路由,这会自动发生。
【解决方案2】:

错误告诉你,路由名称没有定义:

无法为命名路由“items.store”生成 URL因为这样的路由不存在

查看Named Routes section 中的 Laravel 4 文档。有几个示例可以让您清楚地了解如何使用这些路由。

还可以查看RESTful Controllers section

以下是您问题的示例:

Route::get('items', array(
    'as'   => 'items.store',
    'uses' => 'ItemController@getIndex',
));

【讨论】:

    【解决方案3】:

    正如 Shift Exchange 所说,Route::controller() 不会生成名称,但您可以使用第三个参数来生成:

    Route::controller(  'items', 
                        'ItemController', 
                        [
                            'getIndex' => 'items.index',
                            'getCreate' => 'items.create',
                            'postStore' => 'items.store',
                            ...
                        ]
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2016-11-03
      • 2020-06-06
      • 1970-01-01
      • 2016-03-21
      • 2015-01-16
      • 2018-12-15
      相关资源
      最近更新 更多