如何将SOLID原理应用于LARAVEL

问题描述 投票:0回答:1

我刚刚开始研究SOLID principles,我想将其应用于我的Laravel项目。我的问题是我不知道首先应用什么原则,我违反了什么原则。我的项目使用JWT进行了简单身份验证,但是在后期开发中,我将添加Facebook AUTH

这是我的界面

<?php

interface Account {

 public function login();
 public function logout();
}

这里是class

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use App\User;
use App\Contracts\IAccount;

class AuthController extends Controller implements IAccount
{
   /**
  * Create a new AuthController instance.
  *
  * @return void
  */
public function __construct()
{
    $this->middleware('auth:api', ['except' => ['login']]);
}

/**
 * Get a JWT via given credentials.
 *
 * @return \Illuminate\Http\JsonResponse
 */
public function login()
{
    $credentials = request(['email', 'password']);

    if (! $token = auth()->attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    }

    $this->updateStatus();
    return $this->respondWithToken($token); 
}

/**
 * Log the user out (Invalidate the token).
 *
 * @return \Illuminate\Http\JsonResponse
 */
public function logout()
{
    User::where('id',auth()->user()->id)->update(['status' => 'offline','lastActive' => date('H:i:s')]);

    auth()->logout();

    return response()->json(['message' => 'Successfully logged out']);
}

/**
 * Refresh a token.
 *
 * @return \Illuminate\Http\JsonResponse
 */
public function refresh()
{
    return $this->respondWithToken(auth()->refresh());
}

public function updateStatus()
{
    User::where('id',auth()->user()->id)->update(['status' => 'online']);
}

/**
 * Get the token array structure.
 *
 * @param  string $token
 *
 * @return \Illuminate\Http\JsonResponse
 */
protected function respondWithToken($token)
{
    return response()->json([
        'access_token' => $token,
        'token_type' => 'bearer',
        'user' => auth()->user(),
        'expires_in' => auth()->factory()->getTTL() * 60
    ]);
}

}

php laravel solid-principles solid
1个回答
0
投票

很好的问题。在研究此主题时,您会发现很多不同的示例。我本月在Laravel中对SOLID原理进行了一些研究,发现很多人说由于Laravel Eloquent很难实施SOLID原理。

https://johnothecoder.uk/general/how-eloquent-breaks-the-single-responsibility-principle-and-why-im-okay-with-it/

我本人从SOLID原则中汲取了所有要点,并像这样实施它。

型号:用于与数据库表的连接。我的模型中只有关系]

((SingleAction)Controller:我在应用程序中使用Single Action控制器。这是管理控制器的简便方法,它使每个控制器都负有一个责任。我对控制器使用单一责任原则。

SingleActionController看起来像这样:

class ShowRoleController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware(['permission:view roles']);
    }

    /**
     * @param Role $role
     * @return Factory|View
     */
    public function __invoke(Role $role)
    {
        if($role) {
            return view('role.detail', ['role' => $role]);
        } else {
            abort(404, 'Page not found');
        }
    }
}

存储库:为了确保我的控制器不处理任何逻辑代码,我使用存储库的。在存储库中,我使用界面的功能。

接口:我使用界面创建函数,而我的存储库使用这些功能并具有逻辑代码。

我的界面中的函数如下所示:

public function example(Model $model);
© www.soinside.com 2019 - 2024. All rights reserved.