【问题标题】:Controller Method not being called Laravel控制器方法不被称为 Laravel
【发布时间】:2014-12-02 13:42:47
【问题描述】:

我有一个包含下拉列表和提交按钮的表单。像这样:

查看路径:webmasters/filters.blade.php

 {{ Form::open() }}
  {{ Form::select('filt', $Dropdown, 2) }}
  {{ Form::Submit('Filter') }}
 {{ Form::close() }}

还有一个控制器,它使用从数据库中查询的值填充下拉列表。像这样:

控制器名称:WebController.php

 class WebController extends BaseController {
   public function getFilters() {
     $filters = Dropdown::getFilters();
     return View::make('webmasters.filter',['Dropdown'=>$filters]);
   }

   public function postFilters() {
     $filt = Input::get('name'); // getting the value of the select
     $filters = Dropdown::getFilters();
     $query = DB::table('webmasters.top_pages')->where('filter',$filt)->limit(20)->get();
     return View::make('webmasters.filter', array('query'=>$query),['Dropdown'=>$filters]);
   }

 }

这是我的路线:

 Route::resource('topPage', 'WebController@getFilters');

getFilters 是一种模型方法,用于查询数据库以获取下拉列表中的值。

编辑

我的视图文件:

 {{ Form::open() }}
 <p></p>
 <table class='liste' style='margin-left: 0px;' cellpadding='5'> 
 {{ Form::select('name', $Dropdown) }}
 <div>
 {{ Form::Submit('Filter') }}
 </div>
    <tr>
        <td style='background-color: #426bb3; color: white; font-weight: bold; width:16%;'>Datum</td>
        <td align='left' style='background-color: #426bb3; color: white; font-weight: bold; width:12%;'>Page</td>
        <td align='left' style='background-color: #426bb3; color: white; font-weight: bold; width:12%;'>Kategorie</td>

    </tr>   
    @foreach($Webmasters as $topPages)
    <tr>
        <td> {{$topPages->date}} </td>              
        <td> {{$topPages->page}} </td>        
        <td> {{$topPages->category}} </td>  
        </tr>     
    @endforeach   
    </table><br>  
{{ Form::close() }} 

我想在提交表单时调用控制器方法,以便所述方法查询另一个数据库并根据下拉列表的选定值返回一个表(与下拉列表和提交按钮在同一页面上)。

由于使用 Form::post() 创建的默认表单使用 POST,我想我可以使用控制器中的第二种方法访问 select 的值 postFilters()。此方法继续使用该值作为 where 子句,因为它查询另一个 DB 并将结果传递到视图。 问题是,视图没有加载。我想我在路由上做错了什么? 有人可以帮忙吗?

【问题讨论】:

  • “视图未加载”是什么意思?你收到错误信息吗?一个空白屏幕?
  • 嗨@lukasgeiter。感谢您昨天的回复。好吧,屏幕已经包含下拉和提交按钮,但我没有得到应该从第二个控制器方法传递的表。所以它本身并不是空白,只是没有改变。
  • 你能告诉我们filters.blade.php的其余部分吗?或者至少应该显示表格的部分......
  • 我已经编辑了问题并包含了整个视图文件。

标签: php html mysql forms laravel


【解决方案1】:

您的控制器没有将视图所期望的传递给视图。你注入query,视图需要$Webmasters。此外,您添加的带有Dropdown 的第二个数组也不起作用。这应该可以解决问题:

public function postFilters() {
    $filt = Input::get('name'); // getting the value of the select
    $filters = Dropdown::getFilters();
    $query = DB::table('webmasters.top_pages')->where('filter',$filt)->limit(20)->get();
    return View::make('webmasters.filter', ['Webmasters'=>$query, 'Dropdown'=>$filters]);
}

编辑

您还使用带有控制器功能的Route::controller。你必须传递控制器类。

Route::controller('top_page', 'WebController');

现在使用top_page/filters 作为访问表单的 URL 很重要。 (并发布)

【讨论】:

  • 感谢您的意见。我实施了您建议的更改,现在我得到了一个 MethodNotAllowedHttpException,我已经对其进行了一些研究,这似乎是一个路由错误。你知道更多关于这个以及如何摆脱它吗?
  • 不幸的是,它仍然无法正常工作,我遇到了同样的异常。这可能是一个愚蠢的问题,但如果我只是传递控制器类,我不明白如果我们不指定我们希望如何调用它们,控制器方法将如何被选择执行。我这样说是因为我希望它们以特定的顺序被调用。
  • 方法名由 HTTP 动词(POST、GET 等)和您定义的 URL 后面的部分构建...POST /topPage/filters =&gt; WebController@postFiltersGET /topPage/foo =&gt; WebController@getFoo
  • 仍然无法正常工作。由于将控制器类传递给 restful 路由,我什至看不到初始下拉和提交按钮。
  • 你使用的网址是什么?
猜你喜欢
  • 1970-01-01
  • 2023-01-27
  • 2020-11-11
  • 2016-04-04
  • 2014-03-09
  • 2014-05-12
  • 2014-01-04
  • 1970-01-01
  • 2019-02-05
相关资源
最近更新 更多