Laravel路由器从视图中提取URL编码,因此URL编码模型属性



原来的路由转到了/{id},我把路由改成了/{name}

在视图中,我迭代了特定模型,导致此刀片 html:

<a href="{{ route('modelHistory', urlencode(strtolower($model->name)) ) }}">
                                  {{$model->name}}
                                </a>

然后我在控制器中有一些代码,将传递给路由的名称重新转换为与数据库中的名称匹配的名称。

不知何故,Laravel将urlencode和strtolower代码吸收到自身(可能是中间件(中,这样任何对Model::all的检索都会给我们一个urlencode和全部小写的名称。

这成为一个问题,因为我想将 URL 更改为带有下划线的小写名称而不是 urlencoded,但名称保持 urlencoding 和小写,当另一个视图列出模型的所有实例并显示 name 属性时,这是一个问题。

解决方案如下。

在视图中更改 str 函数后,我转到命令行并输入 php artisan .其中一个选项是php artisan route:clear清除路由缓存。我也做php artisan view:clear,但我相信是路线清理做到了。

突然间,名字又恢复了正常。然后我使用了我想要的字符串函数,而 Laravel 并没有将它们吸收进来,而是将它们应用于Model:all()中的所有名称。

作为记录,以下是最终设置:

Route::get('history/{name}', 'Model0Model1sController@getHistory')->name('model1History');
<a href="{{ route('model1History', preg_replace('/(s|+)/i', '_', strtolower($model1->name)) ) }}">
   {{$model1->name}}
</a>

这是一次令人沮丧的经历,所以希望你们都不必处理它

最新更新