创建action类首先,你需要创建一个action类。在laravel 8及以上版本中,可以通过artisan命令来创建:
php artisan make:action myaction
这将在app/action目录下为你创建一个新的类文件“myaction.php”。现在,我们可以开始编写action的逻辑了。
编写action的逻辑在你的action中,你可以为控制器中的每个方法定义具体的业务逻辑。在这里,我们将创建一个方法来处理用户登录的逻辑。
<?phpnamespace app\actions;use illuminate\support\facades\auth;class loginuseraction{ public function execute(array $credentials) { $attempt = auth::attempt($credentials); if (!$attempt) { throw new \exception('invalid login credentials'); } return auth::user(); }}
在上面的示例中,我们创建了一个名为loginuseraction的action。它接收一个包含用户登录凭据的数组,执行登录尝试,如果有错误则会抛出异常,否则返回认证成功的用户。
值得注意的是,我们使用laravel的auth门面来执行登录操作。这允许我们轻松地利用laravel的认证系统。
在控制器中使用action现在,我们已经创建了一个action类并定义了其逻辑。下一步是在控制器中使用它。
使用action的第一步是打开控制器并添加一个use语句,以引入action类:
<?phpnamespace app\http\controllers;use app\actions\loginuseraction;use illuminate\http\request;class authcontroller extends controller{ public function login(request $request, loginuseraction $loginaction) { $credentials = $request->only(['email', 'password']); try { $user = $loginaction->execute($credentials); } catch (\exception $e) { return response()->json([ 'message' => $e->getmessage() ], 401); } return response()->json(compact('user')); }}
在上述代码中,我们从我们自己的命名空间中引用了 loginuseraction。然后我们添加了 login() 方法,其首个参数是 laravel 的 request 对象,第二个参数是我们上面创建的 loginuseraction 实例。
在 login() 中,我们首先也根据请求的内容提取出 email 和 password,接着调用我们的 action 通过 $credentials 的参数来执行逻辑。如果成功,我们将用户以 json 格式返回,否则我们将错误信息返回给客户端。
调用action现在,我们可以访问我们的login()方法,并调用loginuseraction类中的execute方法。我们将在http请求中传递一个数组,包含了一些登录凭证信息,并返回结果。
在路由中定义对应的登录路由:
<?phpuse illuminate\support\facades\route;use app\http\controllers\authcontroller;route::post('/login', [authcontroller::class, 'login'])->name('login');
现在我们可以访问我们的laravel应用的/login路由,会像这样:
post /login http/1.1host: localhost:8000content-type: application/json{ email: user@example.com, password: my_password}
这将触发我们在控制器中定义的 login() 方法,调用 loginuseraction,传入 email 和 password 作为参数。
总结laravel action 提供了一种简单、干净的方法来组织你的业务逻辑。通过将业务逻辑从控制器中移出并放入 action 类中,你可以带来很多代码重用和可维护性的提升。
在使用 laravel action 时,你应该遵循以下两条最佳实践:
每个方法应该尽量只做一件事情。避免在 action 类中直接访问外部类或对象,使用传递变量的方式来实现数据的共通和重复的处理。最后,需要注意的是,在 laravel 8 中引入了 action 功能,如果你使用的是较老版本的 laravel,可能需要手动创建 action 类,并将类文件存储在一个合适的位置,然后在控制器中手动实例化和调用。
以上就是详细介绍laravel action的编写步骤和实践的详细内容。
