Laravel 5.1 可重复使用的弹头
Laravel 5.1 Reusable Slug
你好,我怎样才能使独特的 slug 逻辑在我的项目中可重用。我有一种在我的产品模型中创建一个独特的 slug 的方法,我想在我的其他模型中使用相同的逻辑:
/**
* Set the name attribute and automatically the slug
*
* @param string $name
*/
public function setNameAttribute($name)
{
$this->attributes['name'] = $name;
if(! $this->exists)
{
$this->setUniqueSlug($name, '');
}
}
/**
* Recursive routine to set a unique slug
*
* @param string $name
* @param mixed $extra
*/
public function setUniqueSlug($name, $extra)
{
$slug = str_slug($name . '-' . $extra);
if (static::whereSlug($slug)->exists())
{
$this->setUniqueSlug($name, $extra + 1);
return;
}
$this->attributes['slug'] = $slug;
}
有很多方法,您可以创建一个从 eloquent 扩展的基础模型 class,然后从该基础模型扩展其余模型。在该基础模型中创建方法 "setUniqueSlug" 以便可以从任何其他模型访问。
或者您可以创建一个助手 class,这样您就可以从任何地方调用 "setUniqueSlug"。
Martin Beans 的评论将是解决此问题的最佳方式。
Paul Vidal 的方法没有任何问题,但是,我不会使用基本模型方法,除非您打算将它用于每个模型。
只要您没有为 slug 使用不同的字段名称,而是使用类似父 slug 的东西(即 product/{slug}),您应该能够将上述代码直接放入特征中然后 use
输入您想要的模型。
希望对您有所帮助!
你好,我怎样才能使独特的 slug 逻辑在我的项目中可重用。我有一种在我的产品模型中创建一个独特的 slug 的方法,我想在我的其他模型中使用相同的逻辑:
/**
* Set the name attribute and automatically the slug
*
* @param string $name
*/
public function setNameAttribute($name)
{
$this->attributes['name'] = $name;
if(! $this->exists)
{
$this->setUniqueSlug($name, '');
}
}
/**
* Recursive routine to set a unique slug
*
* @param string $name
* @param mixed $extra
*/
public function setUniqueSlug($name, $extra)
{
$slug = str_slug($name . '-' . $extra);
if (static::whereSlug($slug)->exists())
{
$this->setUniqueSlug($name, $extra + 1);
return;
}
$this->attributes['slug'] = $slug;
}
有很多方法,您可以创建一个从 eloquent 扩展的基础模型 class,然后从该基础模型扩展其余模型。在该基础模型中创建方法 "setUniqueSlug" 以便可以从任何其他模型访问。 或者您可以创建一个助手 class,这样您就可以从任何地方调用 "setUniqueSlug"。
Martin Beans 的评论将是解决此问题的最佳方式。
Paul Vidal 的方法没有任何问题,但是,我不会使用基本模型方法,除非您打算将它用于每个模型。
只要您没有为 slug 使用不同的字段名称,而是使用类似父 slug 的东西(即 product/{slug}),您应该能够将上述代码直接放入特征中然后 use
输入您想要的模型。
希望对您有所帮助!