我在laravel 5.4中的控制器有些问题
我的routes.php:
Route::group(array('domain' => '{subdomain}.site.com','as'=>'www::','middleware'=>array('web','varnish')), function() {
Route::any('/material/{page?}/', [
'as' => 'www_material', 'uses' => 'www\MaterialController@index'
]);
});
我的控制器:
<?php namespace App\Http\Controllers\www;
use App\Http\Controllers\Controller;
use View;
use DB;
use Illuminate\Http\Request;
class MaterialController extends Controller {
public function index($subdomain, $page = 1, Request $request)
{
echo $subdomain;
echo $page;
//...some code
}
}
网址www.site.com/material/2/
没有问题:
submodain = www,
page = 2
但是www.site.com/material/
:
Type error: Too few arguments to function App\Http\Controllers\www\MaterialController::index(), 2 passed and exactly 3 expected
我无法理解为什么会发生这种情况,因为页面的默认值是1。
有人能帮助我吗?我不能单独解决这个问题。
谢谢。
答案 0 :(得分:2)
您的问题是索引方法中参数的顺序。
由于Request对象将始终存在,首先是$ subdomain,然后是$ page
如上面示例#5中的 php website所述:
请注意,使用默认参数时,任何默认值都应位于任何非默认参数的右侧;否则,事情将无法按预期工作。
public function index(Request $request, $subdomain, $page = 1)
{
echo $subdomain;
echo $page;
//...some code
}
答案 1 :(得分:0)
尝试删除下面提到的{page?}旁边的尾部斜杠,然后重新运行代码。
Route::any('/material/{page?}', [
'as' => 'www_material', 'uses' => 'www\MaterialController@index'
]);