【问题标题】:Laravel controller method not found未找到 Laravel 控制器方法
【发布时间】:2014-05-28 13:18:05
【问题描述】:

尝试运行以下 Laravel 4.1 路由:http://myserver.dev/admin/import-items/1

当我这样做时,我收到以下错误:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException
Controller method not found.

这是我的路线:

Route::group(array('prefix' => 'admin', 'before' => 'auth'), function()
{
    Route::get('items/import-items/{after?}', array('as' => 'importItems', 'uses' => 'ItemsController@importItems'));

    Route::get('items/{id}/show', 'ItemsController@show');
    Route::resource('items', 'ItemsController');
});

我可以看一下 Items 控制器,方法importItems 肯定在那里:

class ItemsController extends \BaseController {

    /**
     * Item Model
     * @var Item
     */
    protected $item;

    /**
     * Inject the models.
     * @param Item $item
     */
    public function __construct(Item $item)
    {
        parent::__construct();

        $this->item = $item;
    }

    /**
     * Display a listing of items
     *
     * @return Response
     */
    public function index($items = [])
    {
        $title = Lang::get('admin/items/title.manage_items');

        if (empty($items))
            $items = $this->item;

        return View::make('admin/items/index', compact('items', 'title'));
    }

    /**
     * Imports Items after specified date.
     * @return array
     **/
    public function importItems($after = 7)
    {

        $results = Item::importItems($after);

        return $results;
    }
}

当我运行php artisan routes 时,路线在列表中清楚地显示为可用:

GET|HEAD admin/items/import-items/{after?} | importItems   | ItemsController@importItems

问题是,这个确切的代码在我拥有的另一个项目中工作得很好。在我复制了路由设置、控制器和模型之后,它决定不在这个新项目中工作。我觉得我在这里错过了一些关键步骤,因为我看不出代码中有任何差异。

有什么想法吗?

【问题讨论】:

  • 请发帖ItemsController
  • 你跑composer dump-autoload了吗?
  • 是的,运行了composer dump-autoload,但没有修复。已将ItemsController 添加到帖子中。
  • 试试\ItemsController@show
  • @AmitGarg 结果相同。

标签: php laravel-4


【解决方案1】:

您使用了错误的网址。这个网址:

http://myserver.dev/admin/import-items/1

应该是这个

http://myserver.dev/admin/items/import-items/1

Route::get('items/import-items/{after?}', array('as' => 'importItems', 'uses' => 'ItemsController@importItems'));

应该是

Route::get('import-items/{after?}', array('as' => 'importItems', 'uses' => 'ItemsController@importItems'));

...取决于你想要哪个网址

【讨论】:

  • 太棒了。令人惊奇的是,我的意思是“掌心”。这一切都归结为我嵌入在一个视图中的链接,该链接在新代码中是错误的,而在旧代码中是正确的。谢谢你抓住这个!! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2019-07-12
  • 2016-04-04
  • 2014-03-09
  • 2014-05-12
  • 2014-01-04
  • 1970-01-01
相关资源
最近更新 更多