Laravel为不同大小的子弹分配单个路线

时间:2019-05-06 13:07:17

标签: php laravel routes

我需要一种创建允许可变数量的段塞的路由的方法,因此我不需要为同一控制器方法创建10条以上的路由。这样,网站管理员就可以在没有限制的情况下创建目录页面和内容的文件夹样式结构。

然后,该路线将排除其中的任何一条,并将子弹阵列传递给控制器​​:

  • www.site/designs/paint /
  • www.site/designs/paint/pointalism /
  • www.site/designs/paint/pointalism/portrait

如何在不使用get参数的情况下实现这一目标?

当前路线:

class BaseClass<ItemType> {
    constructor(__items: Iterable<ItemType>) {}
}

export interface GenericConstructorInterface<S, T extends BaseClass<S>> {
    new(items: Iterable<S>): T;
}

export function factory2<A>(__items: Iterable<A>): BaseClass<A>
export function factory2<A, B extends BaseClass<A>>(__items: Iterable<A>, subclassConstructor: GenericConstructorInterface<A, B>): B 
export function factory2<A>(__items: Iterable<A>, subclassConstructor: GenericConstructorInterface<A, BaseClass<A>> = BaseClass): BaseClass<A> {
    return new subclassConstructor(__items);
}

所需的路线:

 Route::get('/designs/{catagory1}', 'DesignController@catagories')->name('design.items');
 Route::get('/designs/{catagory1}/{catagory2}', 'DesignController@catagories')->name('design.items');
 Route::get('/designs/{catagory1}/{catagory2}/{catagory3}', 'DesignController@catagories')->name('design.items');
 Route::get('/designs/{catagory1}/{catagory2}/{catagory3}/{catagory4}', 'DesignController@catagories')->name('design.items');
 Route::get('/designs/{catagory1}/{catagory2}/{catagory3}/{catagory4}/{catagory5}','DesignController@catagories')->name('design.items');
 ..etc

1 个答案:

答案 0 :(得分:0)

要告诉Laravel,将完整的参数提供给控制器,您必须添加一个where clause,如下所示:

Route::get('designs/{query}', 'DesignController@catagories')->where('query','.+')

基本上,它所做的就是将.+{query}进行匹配,在这种情况下,它将匹配任何内容。

然后,您可以在代码中使用explode('/', $theUrlParam),以接收数组中的所有部分。