Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel雄辩的访问者:通过请求参数修改值_Laravel_Eloquent - Fatal编程技术网

Laravel雄辩的访问者:通过请求参数修改值

Laravel雄辩的访问者:通过请求参数修改值,laravel,eloquent,Laravel,Eloquent,我想在用户名列中添加一个前缀,它直接来自HTTP请求。我的控制器功能如下: public function myFunc(Request $request){ $prefix = $request->get("prefix"); $users = User::all(); //need to change } public function getFullNameAttribute() { if (request()->pre

我想在用户名列中添加一个前缀,它直接来自HTTP请求。我的控制器功能如下:

    public function myFunc(Request $request){
        $prefix = $request->get("prefix");
        $users = User::all(); //need to change
    }
public function getFullNameAttribute()
{
    if (request()->prefix) {
        return request()->prefix."- ".$this->name.' ('.$this->company_name.')';
    } else {
        return $this->name.' ('.$this->company_name.')';
    }
}
我的用户模型:

    public function getFullNameAttribute()
    {
        $full_name = $this->name . ' (' . $this->company_name . ')';
        return $full_name;
    }
如何在访问者中传递$前缀

    public function getFullNameAttribute()
    {
        $full_name = $prefix."- ".$this->name . ' (' . $this->company_name . ')';
        return $full_name;
    }

您可以在访问器中解析请求。如果发送了字符串,则设置默认字符串

public function getFullNameAttribute()
{
    $request = resolve(Request::class);
    $prefix = $request->get('prefix', '');

    return $prefix."- ".$this->name . ' (' . $this->company_name . ')';
}

您可以在控制器中的Elount集合上使用foreach进行此操作:

public function myFunc(Request $request)
{
    $prefix = $request->get("prefix");
    $users  = User::all(); //need to change
    foreach ($users as $user) {
        $user->full_name = $prefix."- ".$user->full_name;
    }
}
或者,您可以在模型中使用request()函数:

public function getFullNameAttribute()
{    
    return request()->prefix."- ".$this->name . ' (' . $this->company_name . ')';
}
但我认为最好使用以下条件:

    public function myFunc(Request $request){
        $prefix = $request->get("prefix");
        $users = User::all(); //need to change
    }
public function getFullNameAttribute()
{
    if (request()->prefix) {
        return request()->prefix."- ".$this->name.' ('.$this->company_name.')';
    } else {
        return $this->name.' ('.$this->company_name.')';
    }
}

这回答了你的问题吗?不能,如果要传递参数,则需要使用方法。在我的情况下,$prefix作为请求来自HTTP请求parameter@Berto99你能告诉我更多吗?我想这是一个有效的解决方案,但我会问自己这是否“正确”。。你在方法和请求之间创建了一个无用的依赖关系,那么为什么不使用一个好的普通方法呢?我觉得访问器是Laravel中的一个核心方法,用方法访问属性是反模式的。这是完全有效的,解决了他的问题。如果您想避免依赖关系,我会为前缀计算创建一个服务,但在这种情况下,这是过分的。您的意思是创建一个类似CalculatePrefixService的类,它只会返回
$request->get('prefix')??““
然后将其注入到模型中?如果是这样的话,是的,这有点过分了,但是相关的,因为请求和模型之间没有关联。对于这个问题,它是有意义的,而且一般来说,Laravel是为了打破更传统的OOP设计方法的一些缺点而构建的。但是,既然你对它有这么好的想法,w为什么你没有回答呢?啊哈,因为第一个问题只是一个问题,第二个问题是为了检查我对服务的理解是否正确,因为我从来没有找到一些资源来解释服务的真正用途……有人登录,有人使用它们进行注入,等等,所以这是一件大事比如“也许这就是你所指的服务的想法?”啊哈,谢谢你,谢谢你,谢谢你。这也行,但我接受了mhrn的回答,因为他一开始给出了正确的答案。我会在得到15分后立即投票给你:)。。。