【问题标题】:How to pass an argument to function in Controller from antoher Controller in Laravel 8如何从 Laravel 8 中的另一个控制器将参数传递给控制器​​中的函数
【发布时间】:2021-04-19 17:06:23
【问题描述】:

我在 Laravel 8 中从事一个项目。在一个控制器中,我通过 $request 接收一些数据,然后对它们做一些事情。之后,当数据正常时,我想将其传递给下一个 Controller 以对其进行另一项工作。

我就是这样做的:

class UserController extends Controller
{
    public function validation(Request $request)
    {
        $data = $request->all();
    
        if (!is_numeric($data['from']) || !is_numeric($data['to']) || !is_numeric($data['attempts'])) {
            return response()->json(['error' => 'Form fields with number in theirs name must be a number']);
        } elseif ($data['from'] <= 0 || $data['from'] >= ($data['to'] - 2)) {
            return response()->json(['error' => 'Field with the lowest number must be grater than 0 and at least 2 smaller than field with the highest number']);
        } elseif ($data['to'] <= 2 || $data['to'] <= ($data['from'] + 2)) {
            return response()->json(['error' => 'Field with the highest number must be grater than 2 and at least 2 bigger than field with the lowest number']);
        } elseif ($data['attempts'] <= 0) {
            return response()->json(['error' => 'Field with number of attempts must be grater than 0']);
        } else {
    
            $user = new User;
    
            $user->playerName = $data['name'];
    
            $user->save();
    
            $data['id'] = $user->id;
    
            return redirect()->action(
                [GameController::class, 'index'],
                $data
            );
        }
    }
}

这是另一个控制器:

class GameController extends Controller
{
    public function index(Request $request, $data): View
    {
        dd($data);

        return view('game');
    }
}

问题是我收到错误消息:

函数 App\Http\Controllers\Game\GameController::index() 的参数太少,在 C:\xampp\htdocs\app\vendor\laravel\framework\src\Illuminate\Routing\Controller.php 中传递了 1 个在第 54 行,预计正好 2 行

有没有办法将 $data 从一个控制器提供给另一个控制器?

也许有一种方法可以将一些数据添加到一个控制器中的 $request 并以这种方式将其传递给另一个控制器?

【问题讨论】:

  • 您的控制器方法指定它采用路由参数$data,但此信息是输入而不是路由参数
  • 好的。那么在这种情况下我可以使用女巫方法吗?
  • 您必须从请求中获取此数据,就像您当前在 validation 方法中所做的一样,并从您的控制器方法中删除该参数
  • 它的工作,但有一个问题。将我的用户保存到数据库后,我向该数据添加了一个参数 id。但是这个参数不会在请求中。如何将其添加到请求中?
  • 这对我来说有点奇怪。你想做什么?

标签: php laravel controller


【解决方案1】:

在第一个控制器中你应该这样做:

return redirect(route('routeToSecondController', [*your data*]));

如果它会发布会更好。 您不应该在第二个控制器中添加多个参数。所有数据都将保存在 $request->all() 中。

不要以您的方式验证数据。我推荐你 在具有规则的请求类中执行此操作 (https://laravel.com/docs/8.x/validation#form-request-validation) 或使用 Assert 库进行验证 (https://github.com/beberlei/assert)。 希望对你有帮助

【讨论】:

  • 感谢您的建议。正如您向我展示的那样,我将尝试以其他方式验证。但是重定向我还有另一个问题,我有错误:数组到字符串的转换。
  • 好的。我处理这个错误。谢谢,一切正常。
猜你喜欢
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
相关资源
最近更新 更多