【问题标题】:Laravel 4 URL::action errorLaravel 4 URL::action 错误
【发布时间】:2013-08-20 11:00:17
【问题描述】:

我的控制器目录中有一个名为 CharactersController.php 的控制器。下面是两个函数:

    public function search()
{
    return View::make('search.search');
}

public function post_search()
{
    $name = Input::get('character');
    $searchResult = Player::where('name', 'LIKE', '%'.$name.'%')->paginate(5);
    return View::make('search.post_search')
            ->with('name', $name)
            ->with('searchResult', $searchResult);
}

在第一个函数 (function search()) 中,我返回一个视图。这是视图的代码(只是表单):

        <form id="custom-search-form" class="form-search form-horizontal pull-right" action="{{ URL::action('CharactersController@post_search') }}" method="get">
        <div class="input-append spancustom">
            <input type="text" class="search-query" name="character" placeholder="Character/guild name">
            <button type="submit" class="btn"><i class="icon-search"></i></button>
        </div>
    </form>

当我尝试运行表单(进行搜索)时,我收到 Unknown action [CharactersController@post_search]. 错误。我之前遇到过这个错误,我尝试切换控制器,尝试做所有事情。但它没有用。所以我放弃了。

谁能解决?

【问题讨论】:

  • 你试过运行 composer dump-autoload 吗?
  • @TheShiftExchange 尝试过,收到一条错误消息,指出我的作曲家版本过旧,我需要自行更新它。这就是我所做的。尝试再次运行它,同样的事情发生了。
  • 这不是错误信息。这只是一条错误消息。在您的情况下,作曲家实际上将继续并完成自动加载。应该是的。
  • 在您的 routes.php 文件中,将有问题的 Route::get() 函数放在顶部。如果你有一个Route::controller() 方法设置或类似的东西,它可能会在你想要它之前抓取并重定向请求。
  • 不,我只是有这些用于新闻索引和新闻创作..您可以查看我的路线:paste.laravel.com/Kxb

标签: php html forms laravel laravel-4


【解决方案1】:

那个控制器是RESTful?

您是否在 routes.php 中创建了Route::controller()

如果不是RESTFul,您可以尝试删除方法标题中的post_吗?

【讨论】:

    【解决方案2】:

    函数名称需要根据PSR-1 使用驼峰命名法。将 post_search 更改为 postSearch

    【讨论】:

    • 还是不行。我设法使它与 Route::post 和 postSearch 一起工作,但我不想让它发布。我希望它像以前一样成为 get 方法,但我无法在没有错误的情况下更改表单中的操作。表示控制器方法不存在。
    • 你在使用类似:Route::get('url', ['uses' => 'CharactersController@postSearch']);
    • 你能粘贴到你的控制器和堆栈跟踪...我刚刚尝试使用 Route::get('characters/search', 'CharactersController@postSearch');它在我的设置中运行良好
    【解决方案3】:

    你真的为控制器的方法定义了一个路由吗?你需要这样做,否则调用URL::action()时会抛出讨厌的异常

    【讨论】:

    • 是的,没有。但是我不想有一个 post 方法,我想要一个 get 方法,因为 post 会很烦人。我可以有两条路线吗?
    • 我对 Laravel 3 了解不多,但我假设您使用的是最新版本(即在撰写本文时为 4),因为您放置了标签。基本上,您可以只调用Route::get('someurl', 'CharactersController@post_search'),它应该使用post_search() 方法处理someurl 上的GET 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2015-09-02
    • 2014-06-10
    • 2014-03-26
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多