【问题标题】:Laravel Routing for SEO path / title of a table用于 SEO 路径/表标题的 Laravel 路由
【发布时间】:2014-08-30 09:47:24
【问题描述】:

我需要询问我的问题的解决方案

通常人们会制作像 mylaravelsite/products/{id} 这样的 url 路径 前任。 mylaravelsite/products/1

我正在建立一个网站,但我需要创建像 mylaravelsite/products/{title} 这样的 url 路径 例子: mylaravelsite/产品/产品名称

在做了 Alpha 解决方案之后,就可以了 :)

【问题讨论】:

    标签: laravel routing seo laravel-routing


    【解决方案1】:

    你可以做到。如果您想将参数用作slug/string 而不是id/numeric,这并不重要。只需像为数字 id 参数声明的方式一样声明路由。例如,你可以这样声明一个路由:

    Route::get(
        '/products/{title}',
        array('uses' => 'ProductController@show', 'as' => 'product.show')
    );
    

    那么,这条路由的URL 可能是http://yourdomain.com/products/name-of-product

    人们使用id 的原因是,大多数情况下人们在他们的数据库中使用auto-incremented 数字idprimary key,使用类似的东西是一个好主意,这将是独一无二的。您只需确保您的产品也是独一无二的,然后使用以下命令将它们作为 slug 插入数据库中:

    $product->title = Str::slug(Input::get('product_title'));
    

    另外,你可以在你的路由中使用 where 条件来确保提供给路由的产品名称是一个字符串,如下所示:

    Route::get(
        '/products/{title}',
        array('uses' => 'ProductController@show', 'as' => 'product.show')
    )->where('title', '[A-Za-z-]+');
    

    这是我出于相同原因使用的宏(从 Slug 到 Title):

    Str::macro('toTitle', function($str){
        return ucwords(str_replace('-', ' ', $str));
    });
    

    您也可以使用普通的辅助函数,如果需要,您也可以使用preg_replace

    【讨论】:

    • 如果我将我的标题作为 slug 插入到我的数据库中,我如何用普通标题(没有 slug)打印出来
    • 很简单,只需要替换-_即可。
    • 我收到一些错误,例如 findRoute 、调度、匹配等,我将编辑并再次发布
    • 抱歉,这是我的错,因为 $ on Route::get('/news/{$title}') 哈哈,顺便说一句,谢谢,这是有效的 :)
    猜你喜欢
    • 2015-08-14
    • 2018-05-24
    • 2016-02-04
    • 1970-01-01
    • 2011-03-29
    • 2020-08-30
    • 2018-06-18
    • 2012-06-15
    • 2015-04-05
    相关资源
    最近更新 更多