我对Laravel和php框架很陌生,如果我错过了一些基本的东西,很抱歉。我在应用程序中创建了一个名为Journey
的新模型,它扩展了标准的Eloquent
模型。我注意到,我在两个不同的控制器中使用Journey模型,因此我复制了一些代码
从本质上讲,我所做的是获取旅程的标题,并使用自定义类对其进行格式化以清除标题(转换为小写、添加连字符、删除空白等),这样我就可以将其附加到页面URL中。
在一个控制器中,我呼叫:
$journey = Journey::find($id);
$journey->cleanURL = Url::clean($journey['name']); // This creates a new element/property with a clean string
另一方面,我打电话给:
$journeys = Journey::all();
foreach ($journeys as $journey) {
$journey->cleanURL = URL::clean($journey['name']);
}
在我的数据库中添加一个带有已清理URL的固定字段是不合适的,因为我可能随时更改标题(已清理URL所基于的标题),并且我希望URL在这种情况下自动更新。不过,说到这里,我重复了我自己,给Url::clean
打了两次电话。
我想做的是编写一个方法或更改现有的方法,这样当我调用Journey::all()
或Journey::find()
或任何基于查询的方法时,URL字段已经存在并填充。我试着浏览了一些Vendor/Eloquent
文件,但它们只是让我感到困惑。
我该怎么做?
您可以为此使用访问器。
在Journey
型号中添加以下功能:
public function getCleanUrlAttribute($value)
{
return Url::clean($this->name);
}
现在您将能够使用:
$journey = Journey::find($id);
echo $journey->clean_url;