dotzero / laravel-adminer

为 Laravel 5+ 编写的 Adminer (由 Jakub Vrana 创建) 包装器

v5.0.0 2023-11-18 09:22 UTC

This package is auto-updated.

Last update: 2024-09-18 11:14:29 UTC


README

Laravel 5 对 Adminer 的包装器。Adminer 是 Jakub Vrana 编写的一个仅包含一个 PHP 文件的优秀数据库管理工具。它是 PhpMyAdmin 的绝佳替代品(也支持 PostgreSQL、SQLite、MS SQL、Oracle、Firebird、SimpleDB、Elasticsearch 和 MongoDB)。

使用方法

要包含库,请转到您的项目文件夹并运行

composer require "miroc/laravel-adminer"

要将 adminer 添加到 Laravel 路由(例如 /adminer),更新 routes/web.php 文件

Route::any('adminer', '\Miroc\LaravelAdminer\AdminerController@index');

要使用 Laravel 默认连接自动登录 Adminer,请添加以下控制器代替

Route::any('adminer', '\Miroc\LaravelAdminer\AdminerAutologinController@index');

禁用 CSRF 中间件

Adminer 不与 VerifyCsrfToken 中间件兼容,因此需要在路由上禁用它。

Laravel 5.1+

VerifyCsrfToken.php 中禁用 CSRF,将 adminer 路由添加到 $except 数组

protected $except = [
    'adminer'
];

Laravel 5.0

最简单的方法是创建一个自定义的 VerifyCsrfToken 中间件,排除选定的路由

use Closure;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;

class CustomVerifyCsrfToken extends VerifyCsrfToken {

    protected $excludedRoutes = ['adminer'];

	public function handle($request, Closure $next)
	{
        if ($this->isExcludedRoute($request)){
            return $next($request);
        } else {
            return parent::handle($request, $next);
        }
	}

    private function isExcludedRoute($request)
    {
        if (count($request->segments()) > 0
            && in_array($request->segment(1), $this->excludedRoutes)){
            return true;
        } else {
            return false;
        }
    }
}

然后使用它替换 Kernel.php 中的 VerifyCsrfToken

protected $middleware = [
	'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
	'Illuminate\Cookie\Middleware\EncryptCookies',
	'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
	'Illuminate\Session\Middleware\StartSession',
	'Illuminate\View\Middleware\ShareErrorsFromSession',
	'Path\To\CustomVerifyCsrfToken',
];

备注

由于 Laravel5 和 Adminer 的函数名冲突,adminer.php 文件中的函数 'cookie()'、'redirect()' 和 'view()' 被添加了 'adm_' 前缀。

如果您发现任何问题,请告知我。