Php Laravel路线和可选参数

Php Laravel路线和可选参数,php,laravel,laravel-5,Php,Laravel,Laravel 5,我在laravel 5.4中的控制器有一些问题 My routes.php: Route::group(array('domain' => '{subdomain}.site.com','as'=>'www::','middleware'=>array('web','varnish')), function() { Route::any('/material/{page?}/', [ 'as' => 'www_material', 'uses' =&g

我在laravel 5.4中的控制器有一些问题

My 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/

Type error: Too few arguments to function App\Http\Controllers\www\MaterialController::index(), 2 passed and exactly 3 expected
我不明白为什么会发生这种情况,因为页面的默认值是1

有人能帮我吗?我一个人解决不了这个问题


谢谢。

尝试删除下面提到的{page?}旁边的尾随斜杠,然后重新运行代码

Route::any('/material/{page?}', [
  'as' => 'www_material', 'uses' => 'www\MaterialController@index'

]))

尝试删除下面提到的{page?}旁边的尾随斜杠,然后重新运行代码

Route::any('/material/{page?}', [
  'as' => 'www_material', 'uses' => 'www\MaterialController@index'

]))

您的问题是参数在index方法中的顺序

由于请求对象将始终存在,请将其放在$subdomain之后,然后是$page

如上例5所述:

请注意,当使用默认参数时,任何默认值都应该位于任何非默认参数的右侧;否则,事情就不会像预期的那样发生


您的问题是参数在索引方法中的顺序

由于请求对象将始终存在,请将其放在$subdomain之后,然后是$page

如上例5所述:

请注意,当使用默认参数时,任何默认值都应该位于任何非默认参数的右侧;否则,事情就不会像预期的那样发生


这与Laravel帐户附带的.htaccess文件没有任何区别。这与Laravel帐户附带的.htaccess文件没有任何区别。根据PHP文档(示例#5)中关于默认参数顺序的说明:“任何默认值都应该位于任何非默认参数的右侧;否则,事情将不会像预期的那样“按照PHP文档(示例#5)中默认参数的顺序”运行:“任何默认值都应该位于任何非默认参数的右侧;否则,事情将无法按预期进行'
public function index(Request $request, $subdomain, $page = 1)
{
    echo $subdomain;
    echo $page;
   //...some code
}