有什么方法可以在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
}
答案 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-url
和api/en/my-url
,则可以设置两条路线:
Route::get('api/{locale}/my-url', 'MyController@myAction');
Route::get('api/my-url', 'MyController@myAction');