Laravel路线和可选参数

时间:2018-04-10 17:16:49

标签: php laravel laravel-5

我在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。

有人能帮助我吗?我不能单独解决这个问题。

谢谢。

2 个答案:

答案 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'

]);