控制器方法不存在。但实际存在。也不随请求传递值
Controller method does not exist. But actually exists. Not passing value with request neither
这简直让我抓狂。大量的研究、测试、与 artisan 的死记硬背双重检查,甚至是一个新的干净 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 的方法就在那里。
我在 view1results 上放了什么并不重要,我只是在尝试一个简单的 {{echo $valueselected}};
还尝试添加另一个不同的视图来传递来自我的控制器的数据。在我的 web.php 中:
Route::get('/viewresults2', function () {
return view('viewresults2');
});
然后在我的控制器中
return view('viewresults2', ['filter1' => $valueselected]);
它给了我一个空白页。
即使使用其他方法识别该方法,它现在也返回任何视图或值:如果我只是绕过视图并尝试:
return $selectedTrend;
仍然得到一个空白页。
它没有识别方法,也没有从 select 传递任何值。
请问这是怎么回事? :(
更新
还有一件事:我的网站文件结构是:
www.mydomain.net/software/public/view1
提交表单后重定向到:
www.mydomain.net/software/public/view1results
只是把它加起来,这样你就可以更好地帮助我处理路线,因为我认为这就是问题所在,我无法弄清楚在我的行动表上使用什么路线。
事实证明这是一个愚蠢的错误(一如既往)。在我看来,我有用于下拉菜单的代码:
<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
这简直让我抓狂。大量的研究、测试、与 artisan 的死记硬背双重检查,甚至是一个新的干净 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 的方法就在那里。
我在 view1results 上放了什么并不重要,我只是在尝试一个简单的 {{echo $valueselected}};
还尝试添加另一个不同的视图来传递来自我的控制器的数据。在我的 web.php 中:
Route::get('/viewresults2', function () {
return view('viewresults2');
});
然后在我的控制器中
return view('viewresults2', ['filter1' => $valueselected]);
它给了我一个空白页。
即使使用其他方法识别该方法,它现在也返回任何视图或值:如果我只是绕过视图并尝试:
return $selectedTrend;
仍然得到一个空白页。
它没有识别方法,也没有从 select 传递任何值。 请问这是怎么回事? :(
更新
还有一件事:我的网站文件结构是:
www.mydomain.net/software/public/view1
提交表单后重定向到:
www.mydomain.net/software/public/view1results
只是把它加起来,这样你就可以更好地帮助我处理路线,因为我认为这就是问题所在,我无法弄清楚在我的行动表上使用什么路线。
事实证明这是一个愚蠢的错误(一如既往)。在我看来,我有用于下拉菜单的代码:
<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>
并且控制器将获得该值。所有其他设置正确。 希望它能帮助
中的另一个新手