如何在Laravel中创造slu ??

时间:2016-07-31 10:54:19

标签: laravel slug

我试图在Laravel 5中开发一个电子商务网站(由于它需要大量定制,我决定不使用Magento或OpenCart。)

我面临的问题是从slugs创建类别和产品网址。

例如,一个URL可以是:

http://somewebsite.com/products/lenovo-yoga-500

但我想制作如下的网址:

http://somewebsite.com/lenovo-yoga-500

我尝试创建一条路线,如:

Route::get('{slug}', 'BaseController@route');

并且在route()方法中,我尝试了:

function route($route){
    $product = Product::where(array('slug' => $slug))->first();

    if(isset($product))
    .....
    else
    .....

但首先,价值没有传递给变量' $ slug'其次,我想在检查条件后将请求重定向到另一条路线。

3 个答案:

答案 0 :(得分:0)

您可能想要使用第一个URL(product / {slug}),因为您使用slug作为第一个参数进行设置的方式,您为任何页面创建的每个路径都将被解释为slug。

无论哪种方式,都要修复你的控制器方法

function route($slug){
    $product = Product::where(array('slug' => $slug))->first();

    if(isset($product))
    .....
    else
    .....

文档涵盖了您在这里要求的所有内容,因此请仔细阅读有关重定向到路线的信息。

答案 1 :(得分:0)

要像Magento那样实现它,您需要添加一个将要重建的新product-routes.php文件。

首先指示app/Providers/RouteServiceProvider.php加载动态路由文件:

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace,
    ], function ($router) {
        require app_path('Http/routes.php');
        require base_path('resources/routes/product-routes.php');
    });
}

下一步:在保存时或当用户在后端请求包含所有产品slug路由并通过slug加载产品时自动重建product-routes.php

希望有所帮助。

答案 2 :(得分:0)

在产品型号中:

public function getRouteKeyName() {
    return 'slug';
}
路线中的

Route::get('{product}', 'ProductController@product');
ProductController中的

public function product(Product $product) {
    $product->doSomething();
}

请注意,路线应该在routes-file中为最后一个,因此任何其他路线都有可能在此之前匹配。