Laravel 5.1 URL中间的可选路由参数

时间:2015-12-12 14:54:35

标签: laravel routing laravel-5.1

有什么方法可以在Laravel 5中的URL中间使用可选路由参数。这就是我想要的

var array2D = Get2DArray(); //some function to populate, you can have your own way to populate your 2D array

List<int> columnSum = new List<int>();

for (int j = 0; j < array2D.length ; ++j)
{
    int sum = 0;
    for (int i = 0; i < array2D[j].length; ++i)
    {
        sum = sum + array2D[i][j];
    }

    columnSum.Add(sum); // columnSum List contain the sum of individual column
}

2 个答案:

答案 0 :(得分:2)

您不能在路径路径中间使用可选路由参数,因为如果省略它们会使定义模糊不清,并且路线不会匹配。

您可以有两个路线定义,一个有,一个没有(正如您在评论中建议的那样):

Route::get('api/{locale}/my-url', 'MyController@myAction');
Route::get('api//my-url', 'MyController@myAction');

但如果你有很多路线,那么你就会有很多重复。

您可以在语言环境中保留一个定义,因为作为URL路径的一部分,没有大量的默认语言环境。因此,如果您的默认语言环境是en,它就会像其他语言环境一样通过路径传递:

http://example.com/api/en/my-url

然而,由于我猜测语言环境用于语言适当的响应并且仅用于GET / HEAD请求,我在这里看到的最好的解决方案是最有意义的,就是通过语言环境作为参数,因为它本质上是一个选项:

http://example.com/api/my-url?locale=en

这样,Laravel路线定义并不需要担心。然后,如果在查询字符串中传递语言环境,则可以使用中间件更改语言环境。这是一个中间件类的示例,它设置区域设置并检查它是否是允许的区域设置:

namespace App\Http\Middleware;

use Closure;

class SetLocale
{
    public function handle($request, Closure $next)
    {
        if ($request->has('locale') && $this->isValidLocale()) {
            app()->setLocale($request->input('locale'));
        }

        return $next($request);
    }

    protected function isValidLocale()
    {
        return in_array(request()->input('locale'), ['en', 'es', 'fr', 'de']);
    }
}

现在,您可以使用控制器操作:

app()->getLocale();

它将被设置为查询字符串中传递的值。

答案 1 :(得分:0)

如果我理解得很好,并且您希望网址同时用作api/my-urlapi/en/my-url,则可以设置两条路线:

Route::get('api/{locale}/my-url', 'MyController@myAction');
Route::get('api/my-url', 'MyController@myAction');