PHP Laravel 在所有视图中使用辅助类
Posted
技术标签:
【中文标题】PHP Laravel 在所有视图中使用辅助类【英文标题】:PHP Laravel use helper class in all views 【发布时间】:2016-04-15 02:50:00 【问题描述】:我想创建一个帮助程序(函数)以避免在 Laravel 5 中的所有视图之间重复代码。该函数应该使用数据库中的数据(Eloquent),因此它不能只是一个简单的函数或通用视图编写器.
理想情况下应该是这样的:
!! Helper::addLinks($text) !!
Helper 类使用 Eloquent 验证 $value
。我想避免更改所有控制器。这方面的最佳做法是什么?
更新;我有以下工作原型。此函数搜索文本并用超链接替换从字典中找到的单词:
function addLinks($text)
//retrieve words from database
$words = Words::all();
//build dictionary with values that needs replacement
$patterns = array();
foreach ($words as $word)
$patterns[$word->id] = $word->word_name;
//build dictionary with values the replacements
$replacements = array();
foreach ($words as $word)
$replacements[$word->id] = "<a href=\"worddetails.php?id=" . $word->id . "\">" . $patterns[$word->id] . "</a>";
//return text, replace words from dictionary with hyperlinks
return str_replace($patterns, $replacements, $text);
我想在视图中的几个文本块和段落中使用此功能。哪种方法最好?
【问题讨论】:
您应该就为什么不能使用视图编辑器或view()->share()
提供更多论据?或者就此而言,为什么您可以使用类方法,但不能使用辅助函数(从您所描述的和逻辑的角度来看,这将起到相同的作用) ?因为它使用 Eloquent 数据库中的数据的论点并不意味着您不能使用您描述的任何选项。
像现在这样将它实现为辅助函数并没有什么问题,因为它并没有那么复杂,而且它可以达到它的目的。如果您有更多属于同一功能类别的辅助函数,或者如果此函数变得更复杂并且需要拆分为更多支持方法,那么您可以按照@SteveBauman 在他的回答中建议的那样将代码重构为一个类(但在这一点并不是真正需要的)。
作为替代方案(因为您的助手正在处理 html 内容),您可以使用 laravelcollective/html
包创建一个处理此问题的 HTML macro。
【参考方案1】:
您可以在您的app/
文件夹中创建一个助手类吗?例如。
namespace App;
use App\Models\User;
class Helper
/**
* Description...
*
* @param mixed $value
*
* @return mixed
*/
public static function lookup($value)
return User::find($value);
您可以拨打!! App\Helper::lookup($value) !!
使用它
使用帮助器准确了解您希望通过 eloquent 验证的内容会很有用,这样我们就可以正确地确定该用例的最具吸引力实践。
【讨论】:
我试过但我得到以下错误:非静态方法 App\Helper::formatUrlsInText() 不应该被静态调用,假设 $this 来自不兼容的上下文 我使用的是 Laravel 8 版本。!! \App\Helperclassname::functionname() !!
在刀片文件中工作。谢谢。以上是关于PHP Laravel 在所有视图中使用辅助类的主要内容,如果未能解决你的问题,请参考以下文章