多个路由默认为Laravel中的控制器

多个路由默认为Laravel中的控制器,laravel,laravel-4,laravel-routing,Laravel,Laravel 4,Laravel Routing,我希望能够通过一个短链接访问一篇文章,如下面的articles/ID,但我也希望使用完整的链接articles/ID/category/slug。但我无法做到以下几点: // Route file: Route::pattern('id', '[0-9]+'); Route::pattern('cat', '^(?!create).*'); Route::pattern('slug', '^(?!edit).*'); Route::get('articles/{id}/{cat?}/{slug?

我希望能够通过一个短链接访问一篇文章,如下面的
articles/ID
,但我也希望使用完整的链接
articles/ID/category/slug
。但我无法做到以下几点:

// Route file:
Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create).*');
Route::pattern('slug', '^(?!edit).*');
Route::get('articles/{id}/{cat?}/{slug?}', ['as' => 'articles.show', 'uses' => 'ArticlesController@show']);

// Controller file:
public function show($id, $cat = null, $slug = null)
{
    dd('1: ' . $cat . ' | 2:' . $slug);
}
下面的链接
articles/28/ullam/vel disependedus aut est est esse fugiat
给出了结果:

string(53) "1: ullam/vel-repellendus-aut-est-est-esse-fugiat | 2:"
我不明白为什么它没有被拆分,如果我删除路径定义中的
,它就会工作

我已经尝试过这个解决方案,但在针对控制器时,它不起作用。为什么?

更新;我最终重新排列了我的路由文件:

Route::pattern('id', '[0-9]+');

// Articles
Route::get('articles/create', ['as' => 'articles.create', 'uses' => 'ArticlesController@create']);
Route::get('articles/edit/{id}', ['as' => 'articles.edit', 'uses' => 'ArticlesController@edit']);
Route::get('articles/{id}/{category?}/{slug?}', ['as' => 'articles.show', 'uses' => 'ArticlesController@show']);
Route::get('articles/{category?}', ['as' => 'articles.index', 'uses' => 'ArticlesController@index']);
Route::resource('articles', 'ArticlesController', ['only' => ['store', 'update', 'destroy']]);

那是你唯一的路线吗?或者你也有一个不同的指向显示?我刚刚添加了这一条作为我的第一条路线:

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
得到了这个结果:

28: ullam | 2:vel-repellendus-aut-est-est-esse-fugiat
更改路由的顺序,将第一个路由作为最特定的路由,最后一个路由作为最通用的路由。此外,如果您有任何模式,它们可以与您的结果相关联

看起来有些模式和可选参数(?)有问题,所以如果

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create).*');
Route::pattern('slug', '^(?!edit).*');

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
它会很好用的。我的建议是不要过多地重复使用管线,如果您有特定的管线,请为其创建一个管线命令,并将其添加到最通用的管线之前:

Route::get('articles/{id}/create', function($id)
{
    dd('this is the create route');
});

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
与寻找正则表达式模式并尝试在其中找到方法的复杂性相比,创建新路由的成本较低。在项目上有新的合作者,甚至是为了你未来的自我,越简单越好


在Laravel4.3中,您可以访问路由缓存,这使得路由几乎立即被触发。

这是您唯一的路由吗?或者你也有一个不同的指向显示?我刚刚添加了这一条作为我的第一条路线:

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
得到了这个结果:

28: ullam | 2:vel-repellendus-aut-est-est-esse-fugiat
更改路由的顺序,将第一个路由作为最特定的路由,最后一个路由作为最通用的路由。此外,如果您有任何模式,它们可以与您的结果相关联

看起来有些模式和可选参数(?)有问题,所以如果

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create).*');
Route::pattern('slug', '^(?!edit).*');

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
它会很好用的。我的建议是不要过多地重复使用管线,如果您有特定的管线,请为其创建一个管线命令,并将其添加到最通用的管线之前:

Route::get('articles/{id}/create', function($id)
{
    dd('this is the create route');
});

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
与寻找正则表达式模式并尝试在其中找到方法的复杂性相比,创建新路由的成本较低。在项目上有新的合作者,甚至是为了你未来的自我,越简单越好


在Laravel4.3中,您可以访问路由缓存,这使得路由几乎立即被触发。

这是您唯一的路由吗?或者你也有一个不同的指向显示?我刚刚添加了这一条作为我的第一条路线:

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
得到了这个结果:

28: ullam | 2:vel-repellendus-aut-est-est-esse-fugiat
更改路由的顺序,将第一个路由作为最特定的路由,最后一个路由作为最通用的路由。此外,如果您有任何模式,它们可以与您的结果相关联

看起来有些模式和可选参数(?)有问题,所以如果

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create).*');
Route::pattern('slug', '^(?!edit).*');

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
它会很好用的。我的建议是不要过多地重复使用管线,如果您有特定的管线,请为其创建一个管线命令,并将其添加到最通用的管线之前:

Route::get('articles/{id}/create', function($id)
{
    dd('this is the create route');
});

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
与寻找正则表达式模式并尝试在其中找到方法的复杂性相比,创建新路由的成本较低。在项目上有新的合作者,甚至是为了你未来的自我,越简单越好


在Laravel4.3中,您可以访问路由缓存,这使得路由几乎立即被触发。

这是您唯一的路由吗?或者你也有一个不同的指向显示?我刚刚添加了这一条作为我的第一条路线:

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
得到了这个结果:

28: ullam | 2:vel-repellendus-aut-est-est-esse-fugiat
更改路由的顺序,将第一个路由作为最特定的路由,最后一个路由作为最通用的路由。此外,如果您有任何模式,它们可以与您的结果相关联

看起来有些模式和可选参数(?)有问题,所以如果

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create).*');
Route::pattern('slug', '^(?!edit).*');

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
它会很好用的。我的建议是不要过多地重复使用管线,如果您有特定的管线,请为其创建一个管线命令,并将其添加到最通用的管线之前:

Route::get('articles/{id}/create', function($id)
{
    dd('this is the create route');
});

Route::get('articles/{id}/{cat}/{slug}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});
与寻找正则表达式模式并尝试在其中找到方法的复杂性相比,创建新路由的成本较低。在项目上有新的合作者,甚至是为了你未来的自我,越简单越好


在Laravel4.3中,您可以访问路由缓存,这使得路由几乎立即被触发。

问题只存在于前瞻模式中

您需要
$
和不包括
/
的类才能使其工作

因此,它们是:

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create$)[^/]*');
Route::pattern('slug', '^(?!edit$)[^/]*');

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});

问题只存在于前瞻模式中

您需要
$
和不包括
/
的类才能使其工作

因此,它们是:

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create$)[^/]*');
Route::pattern('slug', '^(?!edit$)[^/]*');

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});

问题只存在于前瞻模式中

您需要
$
和不包括
/
的类才能使其工作

因此,它们是:

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create$)[^/]*');
Route::pattern('slug', '^(?!edit$)[^/]*');

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});

问题只存在于前瞻模式中

您需要
$
和不包括
/
的类才能使其工作

因此,它们是:

Route::pattern('id', '[0-9]+');
Route::pattern('cat', '^(?!create$)[^/]*');
Route::pattern('slug', '^(?!edit$)[^/]*');

Route::get('articles/{id}/{cat?}/{slug?}', function($id, $cat, $slug)
{
    dd($id.': ' . $cat . ' | 2:' . $slug);
});

嗯,实际上是我的模式阻止了这一切。我有以下几点:<代码>路由::模式('id','[0-9]+');路由::模式('slug','^(?!edit.*');路由::模式('cat','^(?!create.*')看不出他们为什么会干扰这个URL:quis中的articles/22/corrupti/tempora autem numquam,但他们确实会。编辑:正是这一个导致了问题:
Route::pattern('cat','^(?!create.*')所以它比
/{cat?}/
变量中实际匹配的内容更多?我认为它确保了输入
cat
变量不是以create开头的。非常奇怪的行为,这里也有问题。编辑。谢谢,我最后重新安排了路线,最具体的在顶部。嗯,实际上是这样