大家好我试图链接到单个产品,但我想将空格改为" - " beetwen的话。例如,我有产品名称产品示例产品和Laravel生成网址:示例%20Product。我尝试自己做,但它不起作用我在php中删除空格但是当我添加" - "链接坏了。这是我的路线和视图
Route::get('/prod/{prodName}-{id}', 'ProductController@getSingleProduct')->where('prodName', '\w+ ');
@foreach($products as $product)
<div class="col-md-12 item">
<?php $series = str_replace(' ', '-', $product->name);
$series1 = strtolower($series);
?>
<a href="{{URL::to('/')}}/prod/{{$series1}}-{{$product->id}}"><img src="{{URL::to('/')}}/images/{{$product->photo}}.jpg" class="img-responsive thumb pull-left" alt="">
<div class="desc">
<h3>{{$product->name}} </h3>
{{$product->id}}
<img src="images/review2.png" alt="" class="pull-left"><p>4 of 3 reviews</p>
<p class="latest-rev"><span>Latest Review:</span> {{$latestReview[0]->description}} </p>
</div>
</a>
</div>
@endforeach
任何人都可以帮助我吗?
答案 0 :(得分:1)
Laravel&#39; S
Str::slug('My favourite product');
返回:
my-favourite-product
所以你可以使用它。所以只是:
{{Str::slug($product->name)}}
是你想要的。
现在,遵循此策略会导致路由问题。 Laravel被告知你的路由声明,在-
之后的第一个id
之后是http://www.mypage.com/my-nice-product-115
参数。当你的网址是这样的时候:
my
然后Laravel认为单词prodName
是名为nice-product-115
的参数,其余部分表示id
是名为http://www.mypage.com/115/my-nice-product
的参数。所以这永远不会奏效。
如果我是你,我会使用像这样的网址:
id
并且在我的控制器方法中,我将匹配Route::get('/prod/{id}/{prodName}', ['as'=>'product.show', 'uses' => 'ProductController@getSingleProduct']);
参数等。路线也将是:
Str::slug()
我肯定会利用之前提到的{{route('product.show', [$product->id, Str::slug($product->name)])}}
方法。所以把它叫做行动:
{{1}}
可以胜任。
答案 1 :(得分:0)
问题可能是你的路线:
Route::get('/prod/{prodName}-{id}', 'ProductController@getSingleProduct')->where('prodName', '\w+ ');
最后你有空白区域。你应该把它改成:
Route::get('/prod/{prodName}-{id}', 'ProductController@getSingleProduct')->where('prodName', '[\w-]+');
不允许空格并允许prodName中的-
现在当你有空格时,意味着这个空间需要匹配prodName