gpt4 book ai didi

php - Laravel 4 - 不返回被调用方法时从存储库重定向

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:30 25 4
gpt4 key购买 nike

我在我的 Laravel 4 项目中使用存储库模式,但遇到了一些我认为我做错了的事情。

在保存新用户之前,我正在进行用户验证。

我的 Controller 中有一个方法:

public function addNewUser() {
$validation = $this->userCreator->validateUser($input);

if ( $validation['success'] === false )
{
return Redirect::back()
->withErrors($validation['errors'])
->withInput($input);
}

return $this->userCreator->saveUser($input);
}

那么validateUser方法就是:

public function validate($input) {
$rules = array(
'first_name' => 'required',
'last_name' => 'required',
'email_address' => 'unique:users'
);

$messages = [
];

$validation = Validator::make($input, $rules, $messages);

if ($validation->fails())
{
$failed = $validation->messages();
$response = ['success' => false, 'errors' => $failed];
return $response;
}

$response = ['success' => true];
return $response;
}

这可能没问题,但我不喜欢在我的 Controller 中执行 if 语句?我宁愿能够在我的验证类中处理它。

但是为了能够从验证类重定向,我需要返回 Controller 中的方法。

如果我想调用 5 个方法,但我不能全部返回怎么办?

我希望能够简单地按顺序调用这些方法,然后在它们各自的类中处理我需要的东西,如果有任何错误重定向或处理它们。但如果一切正常,只需忽略它并转到下一个函数。

举个例子:

public function addNewUser()
{
$this->userCreator->validateUser($input);
$this->userCreator->formatInput($input);
$this->userCreator->sendEmails($input);
return $this->userCreator->saveUser($input);
}

如果在 Controller 中执行 if 语句没有我想的那么糟糕,那么我可以继续,但这似乎不正确?

最佳答案

对于存储库模式,你可以使用这个:-

像这样设置你的基础模型

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model{

protected static $rules=null;
protected $errors=null;


public function validateForCreation($data)
{
$validation=\Validator::make($data,static::$rules);
if($validation->fails())
{
$this->errors=$validation->messages();
return false;
}
return true;
}

/**
* @return errors
*/
public function getErrors() { return $this->errors; }
}

现在在您的存储库中,添加这些方法

protected $model;

protected $errors=null;

public function model(){ return $this->model; }

public function getErrors(){ return $this->errors; }

public function create($inputs)
{
if(!$this->model->validateForCreation($inputs))
{
$this->errors=$this->model->getErrors();
return false;
}
$new=$this->model->create($inputs);

return $new;
}

Controller 看起来像这样..

public function postCreate(Request $request)
{
$inputs=$request->all();

if($new=$this->repo->create($inputs))
{
return redirect()->back()
->with('flash_message','Created Successfully');
}
return redirect()->back()->withInput()->withErrors($this->repo->getErrors())
->with('flash_message','Whoops! there is some problem with your input.');
}

关于php - Laravel 4 - 不返回被调用方法时从存储库重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29961958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com