控制器方法不存在。但是实际上存在。没有通过请求也没有传递值

时间:2018-12-21 03:25:39

标签: model-view-controller drop-down-menu http-post php-7 laravel-5.7

这只是让我发疯。许多研究,测试,与工匠一起仔细检查了死记号,甚至安装了新的干净的laravel,以确保我的路线正常运行,并且我不断收到错误消息,说我的方法不存在,并且如果我改变了也没关系命名空间或方法名称。

我的路线web.php

Route::get('/view1', function () {
    return view('view1');
});

Route::post('/view1results', [
    "uses" => 'MyController@MyMethod',
    "as" => 'MySearch'
]);

Route::get('/', function () {
    return view('welcome');
});

我的观点1:

  <label class="myfilters">filters:</label>
    <form action="{{ route('MySearch') }}" method="POST">
    {{ csrf_field() }}
    <select class="myfilters" id="filter1" name="filter1">
    <option value=""> -- Select Something --</option>
        <option value="">  option 1 </option>
        <option value="">  option 2 </option>
    </select>
    <input type="submit"></input>
</form>

我的控制器

<?php
use Input;
use app\SubSectorsBPIsData;
use App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

    class SubSectorsBPIsDataController extends Controller
    {
        public function MyMethod(Request $request)
        {
            $valueselected= $request->input('filter1');
             return view('view1results', ['filter1' => $valueselected]);
        }
     }

错误是: BadMethodCallException 方法App \ Http \ Controllers \ MyController :: MyMethod不存在。 正如您所看到的,这里有一个名为 MyMethod 的方法。 放在view1结果上的内容并不重要,我只是在尝试简单的{{echo $valueselected}};

还尝试添加另一个不同的视图以传递来自控制器的数据。在我的web.php中:

Route::get('/viewresults2', function () {
    return view('viewresults2');
});

然后在我的控制器中

return view('viewresults2', ['filter1' => $valueselected]);

它给了我空白页。 即使使用这种其他方法也可以识别该方法,但它现在返回的是任何视图或值:如果我只是绕过该视图并尝试执行以下操作: return $selectedTrend; 仍然得到空白页。

它不能识别方法,也不能传递选择中的任何值。 请问发生了什么事? :(

更新
还有一件事:我的网站的文件结构是:

  

www.mydomain.net/software/public/view1

提交表单后,重定向到:

  

www.mydomain.net/software/public/view1results

只需将其累加起来,这样您就可以更好地帮助我解决问题,因为我认为这就是问题所在,而且我不知道要在我的行动表格中使用哪种方法。

1 个答案:

答案 0 :(得分:0)

原来这是一个愚蠢的错误(像往常一样)。在我看来,我在下拉菜单中使用了以下代码:

<select class="myfilters" id="filter1" name="filter1">
    <option value=""> -- Select Something --</option>
        <option value="">  option 1 </option>
        <option value="">  option 2 </option>
    </select>

请注意,<option value="">没有任何值,控制器需要知道要获取哪个值。而是这样做:

<option value="option1">  option1 </option>
<option value="option2">  opion2 </option>

然后控制器将获得该值。其余所有都已正确设置。 希望它对

中的新手有帮助

Laravel 5.7