mirror of
https://github.com/kuaifan/dootask.git
synced 2026-09-11 14:38:41 +00:00
refactor(skeleton): 平移 Laravel 13 新目录结构
- bootstrap/app.php 改为 Application::configure() 链式配置: withRouting(web/api/console) + withMiddleware + withExceptions - 删除 app/Http/Kernel.php、app/Console/Kernel.php:全局/分组中间件 归并到 13 默认栈,定制项经 trustProxies/trimStrings/ validateCsrfTokens/throttleApi/alias(webapi) 配置 API 表达 - 删除 app/Exceptions/Handler.php:ApiException/ModelNotFound 渲染、 ApiException 条件日志(report->stop)迁入 withExceptions; 图片动态裁剪逻辑抽为 App\Exceptions\ImagePathHandler - 删除 RouteServiceProvider/EventServiceProvider/AuthServiceProvider/ BroadcastServiceProvider:限流、14 个模型观察者、Registered 监听 迁入 AppServiceProvider::boot;新增 bootstrap/providers.php - 删除 7 个框架默认中间件子类(TrustProxies/TrimStrings/VerifyCsrfToken/ EncryptCookies/Authenticate/RedirectIfAuthenticated/ PreventRequestsDuringMaintenance)与未启用的 TrustHosts, 保留自定义 WebApi - config/app.php 移除 providers/aliases 数组(改用框架默认集 + bootstrap/providers.php,补齐 9~13 新增的框架 provider) - artisan、public/index.php 换 13 骨架版(handleCommand/handleRequest) 验证:LaravelS 正常拉起,/health、登录、token 认证、WebSocket 握手、 头像、裁剪(经 withExceptions)、404 兜底全过;php artisan test 145 passed/1 skipped;migrate:fresh 213 全过 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
645cb02757
commit
cbe00f1284
@ -1,41 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Console;
|
|
||||||
|
|
||||||
use Illuminate\Console\Scheduling\Schedule;
|
|
||||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
|
||||||
|
|
||||||
class Kernel extends ConsoleKernel
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The Artisan commands provided by your application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $commands = [
|
|
||||||
//
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define the application's command schedule.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function schedule(Schedule $schedule)
|
|
||||||
{
|
|
||||||
// $schedule->command('inspire')->hourly();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register the commands for the application.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function commands()
|
|
||||||
{
|
|
||||||
$this->load(__DIR__.'/Commands');
|
|
||||||
|
|
||||||
require base_path('routes/console.php');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -4,94 +4,18 @@ namespace App\Exceptions;
|
|||||||
|
|
||||||
use App\Module\Base;
|
use App\Module\Base;
|
||||||
use App\Module\Image;
|
use App\Module\Image;
|
||||||
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
|
||||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
|
||||||
use Throwable;
|
|
||||||
|
|
||||||
class Handler extends ExceptionHandler
|
/**
|
||||||
|
* 图片路径处理(原 Exceptions\Handler::ImagePathHandler,新结构下由 bootstrap/app.php
|
||||||
|
* 的 withExceptions 在 NotFoundHttpException 时调用)
|
||||||
|
*/
|
||||||
|
class ImagePathHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* A list of the exception types that are not reported.
|
* @param \Illuminate\Http\Request $request
|
||||||
*
|
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse|null 命中返回图片响应,未命中返回 null(继续默认 404)
|
||||||
* @var array
|
|
||||||
*/
|
*/
|
||||||
protected $dontReport = [
|
public static function render($request)
|
||||||
//
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A list of the inputs that are never flashed for validation exceptions.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $dontFlash = [
|
|
||||||
'current_password',
|
|
||||||
'password',
|
|
||||||
'password_confirmation',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register the exception handling callbacks for the application.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function register()
|
|
||||||
{
|
|
||||||
$this->reportable(function (Throwable $e) {
|
|
||||||
//
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 将异常转换为 HTTP 响应。
|
|
||||||
* @param $request
|
|
||||||
* @param Throwable $e
|
|
||||||
* @return array|\Illuminate\Http\JsonResponse|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response
|
|
||||||
* @throws Throwable
|
|
||||||
*/
|
|
||||||
public function render($request, Throwable $e)
|
|
||||||
{
|
|
||||||
if ($e instanceof NotFoundHttpException) {
|
|
||||||
if ($result = $this->ImagePathHandler($request)) {
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($e instanceof ApiException) {
|
|
||||||
return response()->json(Base::retError($e->getMessage(), $e->getData(), $e->getCode()));
|
|
||||||
} elseif ($e instanceof ModelNotFoundException) {
|
|
||||||
return response()->json(Base::retError('Interface error'));
|
|
||||||
}
|
|
||||||
return parent::render($request, $e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 重写report优雅记录
|
|
||||||
* @param Throwable $e
|
|
||||||
* @throws Throwable
|
|
||||||
*/
|
|
||||||
public function report(Throwable $e)
|
|
||||||
{
|
|
||||||
if ($e instanceof ApiException) {
|
|
||||||
if ($e->isWriteLog()) {
|
|
||||||
Log::error($e->getMessage(), [
|
|
||||||
'code' => $e->getCode(),
|
|
||||||
'data' => $e->getData(),
|
|
||||||
'exception' => ' at ' . $e->getFile() . ':' . $e->getLine()
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
parent::report($e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 图片路径处理
|
|
||||||
* @param $request
|
|
||||||
* @return \Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\BinaryFileResponse|null
|
|
||||||
*/
|
|
||||||
private function ImagePathHandler($request)
|
|
||||||
{
|
{
|
||||||
$path = $request->path();
|
$path = $request->path();
|
||||||
|
|
||||||
@ -1,68 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
|
||||||
|
|
||||||
class Kernel extends HttpKernel
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The application's global HTTP middleware stack.
|
|
||||||
*
|
|
||||||
* These middleware are run during every request to your application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $middleware = [
|
|
||||||
// \App\Http\Middleware\TrustHosts::class,
|
|
||||||
\App\Http\Middleware\TrustProxies::class,
|
|
||||||
\Illuminate\Http\Middleware\HandleCors::class,
|
|
||||||
\App\Http\Middleware\PreventRequestsDuringMaintenance::class,
|
|
||||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
|
||||||
\App\Http\Middleware\TrimStrings::class,
|
|
||||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The application's route middleware groups.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $middlewareGroups = [
|
|
||||||
'web' => [
|
|
||||||
\App\Http\Middleware\EncryptCookies::class,
|
|
||||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
|
||||||
\Illuminate\Session\Middleware\StartSession::class,
|
|
||||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
|
||||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
|
||||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
|
||||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
|
||||||
],
|
|
||||||
|
|
||||||
'api' => [
|
|
||||||
'throttle:api',
|
|
||||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The application's route middleware.
|
|
||||||
*
|
|
||||||
* These middleware may be assigned to groups or used individually.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $routeMiddleware = [
|
|
||||||
'auth' => \App\Http\Middleware\Authenticate::class,
|
|
||||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
|
||||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
|
||||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
|
||||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
|
||||||
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
|
|
||||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
|
||||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
|
||||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
|
||||||
|
|
||||||
'webapi' => \App\Http\Middleware\WebApi::class,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
|
||||||
|
|
||||||
class Authenticate extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Get the path the user should be redirected to when they are not authenticated.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return string|null
|
|
||||||
*/
|
|
||||||
protected function redirectTo($request)
|
|
||||||
{
|
|
||||||
if (! $request->expectsJson()) {
|
|
||||||
return route('login');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
|
||||||
|
|
||||||
class EncryptCookies extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The names of the cookies that should not be encrypted.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $except = [
|
|
||||||
//
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
|
|
||||||
|
|
||||||
class PreventRequestsDuringMaintenance extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The URIs that should be reachable while maintenance mode is enabled.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $except = [
|
|
||||||
//
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Closure;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
|
|
||||||
class RedirectIfAuthenticated
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Handle an incoming request.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param \Closure $next
|
|
||||||
* @param string|null ...$guards
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function handle(Request $request, Closure $next, ...$guards)
|
|
||||||
{
|
|
||||||
$guards = empty($guards) ? [null] : $guards;
|
|
||||||
|
|
||||||
foreach ($guards as $guard) {
|
|
||||||
if (Auth::guard($guard)->check()) {
|
|
||||||
return redirect(RouteServiceProvider::HOME);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $next($request);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
|
||||||
|
|
||||||
class TrimStrings extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The names of the attributes that should not be trimmed.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $except = [
|
|
||||||
'current_password',
|
|
||||||
'password',
|
|
||||||
'password_confirmation',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Http\Middleware\TrustHosts as Middleware;
|
|
||||||
|
|
||||||
class TrustHosts extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Get the host patterns that should be trusted.
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
public function hosts()
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
$this->allSubdomainsOfApplicationUrl(),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class TrustProxies extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The trusted proxies for this application.
|
|
||||||
*
|
|
||||||
* PHP(Swoole)只在内网被 nginx 访问,外部无法直连,故信任内网代理。
|
|
||||||
*
|
|
||||||
* @var array|string|null
|
|
||||||
*/
|
|
||||||
protected $proxies = '*';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The headers that should be used to detect proxies.
|
|
||||||
*
|
|
||||||
* 只采信 X-Forwarded-Proto:nginx 已用 $the_scheme 覆盖该头(值由 nginx 控制),
|
|
||||||
* 据此让 url() 实时跟随 https;host/for 一律不信,避免 Host 注入与 IP 伪造。
|
|
||||||
*
|
|
||||||
* @var int
|
|
||||||
*/
|
|
||||||
protected $headers = Request::HEADER_X_FORWARDED_PROTO;
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Middleware;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
|
||||||
|
|
||||||
class VerifyCsrfToken extends Middleware
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The URIs that should be excluded from CSRF verification.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $except = [
|
|
||||||
// 接口部分
|
|
||||||
'api/*',
|
|
||||||
|
|
||||||
// 发布桌面端
|
|
||||||
'desktop/publish/',
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@ -2,6 +2,40 @@
|
|||||||
|
|
||||||
namespace App\Providers;
|
namespace App\Providers;
|
||||||
|
|
||||||
|
use App\Models\File;
|
||||||
|
use App\Models\FileUser;
|
||||||
|
use App\Models\Project;
|
||||||
|
use App\Models\ProjectTask;
|
||||||
|
use App\Models\ProjectTaskContent;
|
||||||
|
use App\Models\ProjectTaskUser;
|
||||||
|
use App\Models\ProjectTaskVisibilityUser;
|
||||||
|
use App\Models\ProjectUser;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\UserTag;
|
||||||
|
use App\Models\UserTagRecognition;
|
||||||
|
use App\Models\WebSocketDialog;
|
||||||
|
use App\Models\WebSocketDialogMsg;
|
||||||
|
use App\Models\WebSocketDialogUser;
|
||||||
|
use App\Observers\FileObserver;
|
||||||
|
use App\Observers\FileUserObserver;
|
||||||
|
use App\Observers\ProjectObserver;
|
||||||
|
use App\Observers\ProjectTaskContentObserver;
|
||||||
|
use App\Observers\ProjectTaskObserver;
|
||||||
|
use App\Observers\ProjectTaskUserObserver;
|
||||||
|
use App\Observers\ProjectTaskVisibilityUserObserver;
|
||||||
|
use App\Observers\ProjectUserObserver;
|
||||||
|
use App\Observers\UserObserver;
|
||||||
|
use App\Observers\UserTagObserver;
|
||||||
|
use App\Observers\UserTagRecognitionObserver;
|
||||||
|
use App\Observers\WebSocketDialogMsgObserver;
|
||||||
|
use App\Observers\WebSocketDialogObserver;
|
||||||
|
use App\Observers\WebSocketDialogUserObserver;
|
||||||
|
use Illuminate\Auth\Events\Registered;
|
||||||
|
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||||
|
use Illuminate\Cache\RateLimiting\Limit;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Event;
|
||||||
|
use Illuminate\Support\Facades\RateLimiter;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
class AppServiceProvider extends ServiceProvider
|
class AppServiceProvider extends ServiceProvider
|
||||||
@ -32,5 +66,48 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
\Illuminate\Database\Eloquent\Builder::macro('rawSql', function(){
|
\Illuminate\Database\Eloquent\Builder::macro('rawSql', function(){
|
||||||
return ($this->getQuery()->rawSql());
|
return ($this->getQuery()->rawSql());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$this->configureRateLimiting();
|
||||||
|
$this->registerEvents();
|
||||||
|
$this->registerObservers();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* api 组限流(原 RouteServiceProvider::configureRateLimiting)
|
||||||
|
*/
|
||||||
|
protected function configureRateLimiting()
|
||||||
|
{
|
||||||
|
RateLimiter::for('api', function (Request $request) {
|
||||||
|
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 事件监听(原 EventServiceProvider::$listen)
|
||||||
|
*/
|
||||||
|
protected function registerEvents()
|
||||||
|
{
|
||||||
|
Event::listen(Registered::class, SendEmailVerificationNotification::class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 模型观察者(原 EventServiceProvider::boot)
|
||||||
|
*/
|
||||||
|
protected function registerObservers()
|
||||||
|
{
|
||||||
|
File::observe(FileObserver::class);
|
||||||
|
FileUser::observe(FileUserObserver::class);
|
||||||
|
Project::observe(ProjectObserver::class);
|
||||||
|
ProjectTask::observe(ProjectTaskObserver::class);
|
||||||
|
ProjectTaskContent::observe(ProjectTaskContentObserver::class);
|
||||||
|
ProjectTaskUser::observe(ProjectTaskUserObserver::class);
|
||||||
|
ProjectTaskVisibilityUser::observe(ProjectTaskVisibilityUserObserver::class);
|
||||||
|
ProjectUser::observe(ProjectUserObserver::class);
|
||||||
|
User::observe(UserObserver::class);
|
||||||
|
UserTag::observe(UserTagObserver::class);
|
||||||
|
UserTagRecognition::observe(UserTagRecognitionObserver::class);
|
||||||
|
WebSocketDialog::observe(WebSocketDialogObserver::class);
|
||||||
|
WebSocketDialogMsg::observe(WebSocketDialogMsgObserver::class);
|
||||||
|
WebSocketDialogUser::observe(WebSocketDialogUserObserver::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
|
|
||||||
use Illuminate\Support\Facades\Gate;
|
|
||||||
|
|
||||||
class AuthServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The policy mappings for the application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $policies = [
|
|
||||||
// 'App\Models\Model' => 'App\Policies\ModelPolicy',
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register any authentication / authorization services.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot()
|
|
||||||
{
|
|
||||||
$this->registerPolicies();
|
|
||||||
|
|
||||||
//
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Broadcast;
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
|
||||||
|
|
||||||
class BroadcastServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Bootstrap any application services.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot()
|
|
||||||
{
|
|
||||||
Broadcast::routes();
|
|
||||||
|
|
||||||
require base_path('routes/channels.php');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use App\Models\File;
|
|
||||||
use App\Models\FileUser;
|
|
||||||
use App\Models\Project;
|
|
||||||
use App\Models\ProjectTask;
|
|
||||||
use App\Models\ProjectTaskContent;
|
|
||||||
use App\Models\ProjectTaskUser;
|
|
||||||
use App\Models\ProjectTaskVisibilityUser;
|
|
||||||
use App\Models\ProjectUser;
|
|
||||||
use App\Models\User;
|
|
||||||
use App\Models\UserTag;
|
|
||||||
use App\Models\UserTagRecognition;
|
|
||||||
use App\Models\WebSocketDialog;
|
|
||||||
use App\Models\WebSocketDialogMsg;
|
|
||||||
use App\Models\WebSocketDialogUser;
|
|
||||||
use App\Observers\FileObserver;
|
|
||||||
use App\Observers\FileUserObserver;
|
|
||||||
use App\Observers\ProjectObserver;
|
|
||||||
use App\Observers\ProjectTaskContentObserver;
|
|
||||||
use App\Observers\ProjectTaskObserver;
|
|
||||||
use App\Observers\ProjectTaskUserObserver;
|
|
||||||
use App\Observers\ProjectTaskVisibilityUserObserver;
|
|
||||||
use App\Observers\ProjectUserObserver;
|
|
||||||
use App\Observers\UserObserver;
|
|
||||||
use App\Observers\UserTagObserver;
|
|
||||||
use App\Observers\UserTagRecognitionObserver;
|
|
||||||
use App\Observers\WebSocketDialogMsgObserver;
|
|
||||||
use App\Observers\WebSocketDialogObserver;
|
|
||||||
use App\Observers\WebSocketDialogUserObserver;
|
|
||||||
use Illuminate\Auth\Events\Registered;
|
|
||||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
|
||||||
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The event listener mappings for the application.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $listen = [
|
|
||||||
Registered::class => [
|
|
||||||
SendEmailVerificationNotification::class,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Register any events for your application.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot()
|
|
||||||
{
|
|
||||||
File::observe(FileObserver::class);
|
|
||||||
FileUser::observe(FileUserObserver::class);
|
|
||||||
Project::observe(ProjectObserver::class);
|
|
||||||
ProjectTask::observe(ProjectTaskObserver::class);
|
|
||||||
ProjectTaskContent::observe(ProjectTaskContentObserver::class);
|
|
||||||
ProjectTaskUser::observe(ProjectTaskUserObserver::class);
|
|
||||||
ProjectTaskVisibilityUser::observe(ProjectTaskVisibilityUserObserver::class);
|
|
||||||
ProjectUser::observe(ProjectUserObserver::class);
|
|
||||||
User::observe(UserObserver::class);
|
|
||||||
UserTag::observe(UserTagObserver::class);
|
|
||||||
UserTagRecognition::observe(UserTagRecognitionObserver::class);
|
|
||||||
WebSocketDialog::observe(WebSocketDialogObserver::class);
|
|
||||||
WebSocketDialogMsg::observe(WebSocketDialogMsgObserver::class);
|
|
||||||
WebSocketDialogUser::observe(WebSocketDialogUserObserver::class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,63 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Cache\RateLimiting\Limit;
|
|
||||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\RateLimiter;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
|
||||||
|
|
||||||
class RouteServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* The path to the "home" route for your application.
|
|
||||||
*
|
|
||||||
* This is used by Laravel authentication to redirect users after login.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
public const HOME = '/home';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The controller namespace for the application.
|
|
||||||
*
|
|
||||||
* When present, controller route declarations will automatically be prefixed with this namespace.
|
|
||||||
*
|
|
||||||
* @var string|null
|
|
||||||
*/
|
|
||||||
// protected $namespace = 'App\\Http\\Controllers';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define your route model bindings, pattern filters, etc.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot()
|
|
||||||
{
|
|
||||||
$this->configureRateLimiting();
|
|
||||||
|
|
||||||
$this->routes(function () {
|
|
||||||
Route::prefix('api')
|
|
||||||
->middleware('api')
|
|
||||||
->namespace($this->namespace)
|
|
||||||
->group(base_path('routes/api.php'));
|
|
||||||
|
|
||||||
Route::middleware('web')
|
|
||||||
->namespace($this->namespace)
|
|
||||||
->group(base_path('routes/web.php'));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Configure the rate limiters for the application.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function configureRateLimiting()
|
|
||||||
{
|
|
||||||
RateLimiter::for('api', function (Request $request) {
|
|
||||||
return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
50
artisan
50
artisan
@ -1,53 +1,15 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Input\ArgvInput;
|
||||||
|
|
||||||
define('LARAVEL_START', microtime(true));
|
define('LARAVEL_START', microtime(true));
|
||||||
|
|
||||||
/*
|
// Register the Composer autoloader...
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Register The Auto Loader
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Composer provides a convenient, automatically generated class loader
|
|
||||||
| for our application. We just need to utilize it! We'll require it
|
|
||||||
| into the script here so that we do not have to worry about the
|
|
||||||
| loading of any of our classes manually. It's great to relax.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
require __DIR__.'/vendor/autoload.php';
|
require __DIR__.'/vendor/autoload.php';
|
||||||
|
|
||||||
$app = require_once __DIR__.'/bootstrap/app.php';
|
// Bootstrap Laravel and handle the command...
|
||||||
|
$status = (require_once __DIR__.'/bootstrap/app.php')
|
||||||
/*
|
->handleCommand(new ArgvInput);
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Run The Artisan Application
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| When we run the console application, the current CLI command will be
|
|
||||||
| executed in this console and the response sent back to a terminal
|
|
||||||
| or another output device for the developers. Here goes nothing!
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
|
|
||||||
|
|
||||||
$status = $kernel->handle(
|
|
||||||
$input = new Symfony\Component\Console\Input\ArgvInput,
|
|
||||||
new Symfony\Component\Console\Output\ConsoleOutput
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Shutdown The Application
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Once Artisan has finished running, we will fire off the shutdown events
|
|
||||||
| so that any final work may be done by the application before we shut
|
|
||||||
| down the process. This is the last thing to happen to the request.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
$kernel->terminate($input, $status);
|
|
||||||
|
|
||||||
exit($status);
|
exit($status);
|
||||||
|
|||||||
@ -1,55 +1,75 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/*
|
use App\Exceptions\ApiException;
|
||||||
|--------------------------------------------------------------------------
|
use App\Exceptions\ImagePathHandler;
|
||||||
| Create The Application
|
use App\Module\Base;
|
||||||
|--------------------------------------------------------------------------
|
use Illuminate\Database\Eloquent\ModelNotFoundException;
|
||||||
|
|
use Illuminate\Foundation\Application;
|
||||||
| The first thing we will do is create a new Laravel application instance
|
use Illuminate\Foundation\Configuration\Exceptions;
|
||||||
| which serves as the "glue" for all the components of Laravel, and is
|
use Illuminate\Foundation\Configuration\Middleware;
|
||||||
| the IoC container for the system binding all of the various parts.
|
use Illuminate\Http\Request;
|
||||||
|
|
use Illuminate\Support\Facades\Log;
|
||||||
*/
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
|
|
||||||
$app = new Illuminate\Foundation\Application(
|
return Application::configure(basePath: $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__))
|
||||||
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
|
->withRouting(
|
||||||
);
|
web: __DIR__.'/../routes/web.php',
|
||||||
|
api: __DIR__.'/../routes/api.php',
|
||||||
|
apiPrefix: 'api',
|
||||||
|
commands: __DIR__.'/../routes/console.php',
|
||||||
|
)
|
||||||
|
->withMiddleware(function (Middleware $middleware): void {
|
||||||
|
// PHP(Swoole)只在内网被 nginx 访问,外部无法直连,故信任内网代理。
|
||||||
|
// 只采信 X-Forwarded-Proto:nginx 已用 $the_scheme 覆盖该头(值由 nginx 控制),
|
||||||
|
// 据此让 url() 实时跟随 https;host/for 一律不信,避免 Host 注入与 IP 伪造。
|
||||||
|
$middleware->trustProxies(at: '*', headers: Request::HEADER_X_FORWARDED_PROTO);
|
||||||
|
|
||||||
/*
|
$middleware->trimStrings(except: [
|
||||||
|--------------------------------------------------------------------------
|
'current_password',
|
||||||
| Bind Important Interfaces
|
'password',
|
||||||
|--------------------------------------------------------------------------
|
'password_confirmation',
|
||||||
|
|
]);
|
||||||
| Next, we need to bind some important interfaces into the container so
|
|
||||||
| we will be able to resolve them when needed. The kernels serve the
|
|
||||||
| incoming requests to this application from both the web and CLI.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
$app->singleton(
|
$middleware->validateCsrfTokens(except: [
|
||||||
Illuminate\Contracts\Http\Kernel::class,
|
// 接口部分
|
||||||
App\Http\Kernel::class
|
'api/*',
|
||||||
);
|
|
||||||
|
|
||||||
$app->singleton(
|
// 发布桌面端
|
||||||
Illuminate\Contracts\Console\Kernel::class,
|
'desktop/publish/',
|
||||||
App\Console\Kernel::class
|
]);
|
||||||
);
|
|
||||||
|
|
||||||
$app->singleton(
|
// api 组限流(限流规则定义在 AppServiceProvider::boot)
|
||||||
Illuminate\Contracts\Debug\ExceptionHandler::class,
|
$middleware->throttleApi();
|
||||||
App\Exceptions\Handler::class
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
$middleware->alias([
|
||||||
|--------------------------------------------------------------------------
|
'webapi' => \App\Http\Middleware\WebApi::class,
|
||||||
| Return The Application
|
]);
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This script returns the application instance. The instance is given to
|
|
||||||
| the calling script so we can separate the building of the instances
|
|
||||||
| from the actual running of the application and sending responses.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
return $app;
|
$middleware->redirectGuestsTo('/login');
|
||||||
|
$middleware->redirectUsersTo('/home');
|
||||||
|
})
|
||||||
|
->withExceptions(function (Exceptions $exceptions): void {
|
||||||
|
// /uploads/**.png/crop/... 动态裁剪与缩略图(命中则返回图片,否则走默认 404)
|
||||||
|
$exceptions->render(function (NotFoundHttpException $e, Request $request) {
|
||||||
|
return ImagePathHandler::render($request);
|
||||||
|
});
|
||||||
|
|
||||||
|
$exceptions->render(function (ApiException $e) {
|
||||||
|
return response()->json(Base::retError($e->getMessage(), $e->getData(), $e->getCode()));
|
||||||
|
});
|
||||||
|
|
||||||
|
$exceptions->render(function (ModelNotFoundException $e) {
|
||||||
|
return response()->json(Base::retError('Interface error'));
|
||||||
|
});
|
||||||
|
|
||||||
|
// ApiException 按 isWriteLog 决定是否记录,且不走默认 report
|
||||||
|
$exceptions->report(function (ApiException $e) {
|
||||||
|
if ($e->isWriteLog()) {
|
||||||
|
Log::error($e->getMessage(), [
|
||||||
|
'code' => $e->getCode(),
|
||||||
|
'data' => $e->getData(),
|
||||||
|
'exception' => ' at ' . $e->getFile() . ':' . $e->getLine()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
})->stop();
|
||||||
|
})->create();
|
||||||
|
|||||||
5
bootstrap/providers.php
Normal file
5
bootstrap/providers.php
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
App\Providers\AppServiceProvider::class,
|
||||||
|
];
|
||||||
107
config/app.php
107
config/app.php
@ -123,111 +123,4 @@ return [
|
|||||||
|
|
||||||
'cipher' => 'AES-256-CBC',
|
'cipher' => 'AES-256-CBC',
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Autoloaded Service Providers
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| The service providers listed here will be automatically loaded on the
|
|
||||||
| request to your application. Feel free to add your own services to
|
|
||||||
| this array to grant expanded functionality to your applications.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'providers' => [
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Laravel Framework Service Providers...
|
|
||||||
*/
|
|
||||||
Illuminate\Auth\AuthServiceProvider::class,
|
|
||||||
Illuminate\Broadcasting\BroadcastServiceProvider::class,
|
|
||||||
Illuminate\Bus\BusServiceProvider::class,
|
|
||||||
Illuminate\Cache\CacheServiceProvider::class,
|
|
||||||
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
|
|
||||||
Illuminate\Cookie\CookieServiceProvider::class,
|
|
||||||
Illuminate\Database\DatabaseServiceProvider::class,
|
|
||||||
Illuminate\Encryption\EncryptionServiceProvider::class,
|
|
||||||
Illuminate\Filesystem\FilesystemServiceProvider::class,
|
|
||||||
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
|
|
||||||
Illuminate\Hashing\HashServiceProvider::class,
|
|
||||||
Illuminate\Mail\MailServiceProvider::class,
|
|
||||||
Illuminate\Notifications\NotificationServiceProvider::class,
|
|
||||||
Illuminate\Pagination\PaginationServiceProvider::class,
|
|
||||||
Illuminate\Pipeline\PipelineServiceProvider::class,
|
|
||||||
Illuminate\Queue\QueueServiceProvider::class,
|
|
||||||
Illuminate\Redis\RedisServiceProvider::class,
|
|
||||||
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
|
|
||||||
Illuminate\Session\SessionServiceProvider::class,
|
|
||||||
Illuminate\Translation\TranslationServiceProvider::class,
|
|
||||||
Illuminate\Validation\ValidationServiceProvider::class,
|
|
||||||
Illuminate\View\ViewServiceProvider::class,
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Package Service Providers...
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Application Service Providers...
|
|
||||||
*/
|
|
||||||
App\Providers\AppServiceProvider::class,
|
|
||||||
App\Providers\AuthServiceProvider::class,
|
|
||||||
// App\Providers\BroadcastServiceProvider::class,
|
|
||||||
App\Providers\EventServiceProvider::class,
|
|
||||||
App\Providers\RouteServiceProvider::class,
|
|
||||||
|
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Class Aliases
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| This array of class aliases will be registered when this application
|
|
||||||
| is started. However, feel free to register as many as you wish as
|
|
||||||
| the aliases are "lazy" loaded so they don't hinder performance.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'aliases' => [
|
|
||||||
|
|
||||||
'App' => Illuminate\Support\Facades\App::class,
|
|
||||||
'Arr' => Illuminate\Support\Arr::class,
|
|
||||||
'Artisan' => Illuminate\Support\Facades\Artisan::class,
|
|
||||||
'Auth' => Illuminate\Support\Facades\Auth::class,
|
|
||||||
'Blade' => Illuminate\Support\Facades\Blade::class,
|
|
||||||
'Broadcast' => Illuminate\Support\Facades\Broadcast::class,
|
|
||||||
'Bus' => Illuminate\Support\Facades\Bus::class,
|
|
||||||
'Cache' => Illuminate\Support\Facades\Cache::class,
|
|
||||||
'Config' => Illuminate\Support\Facades\Config::class,
|
|
||||||
'Cookie' => Illuminate\Support\Facades\Cookie::class,
|
|
||||||
'Crypt' => Illuminate\Support\Facades\Crypt::class,
|
|
||||||
'Date' => Illuminate\Support\Facades\Date::class,
|
|
||||||
'DB' => Illuminate\Support\Facades\DB::class,
|
|
||||||
'Eloquent' => Illuminate\Database\Eloquent\Model::class,
|
|
||||||
'Event' => Illuminate\Support\Facades\Event::class,
|
|
||||||
'File' => Illuminate\Support\Facades\File::class,
|
|
||||||
'Gate' => Illuminate\Support\Facades\Gate::class,
|
|
||||||
'Hash' => Illuminate\Support\Facades\Hash::class,
|
|
||||||
'Http' => Illuminate\Support\Facades\Http::class,
|
|
||||||
'Lang' => Illuminate\Support\Facades\Lang::class,
|
|
||||||
'Log' => Illuminate\Support\Facades\Log::class,
|
|
||||||
'Mail' => Illuminate\Support\Facades\Mail::class,
|
|
||||||
'Notification' => Illuminate\Support\Facades\Notification::class,
|
|
||||||
'Password' => Illuminate\Support\Facades\Password::class,
|
|
||||||
'Queue' => Illuminate\Support\Facades\Queue::class,
|
|
||||||
'Redirect' => Illuminate\Support\Facades\Redirect::class,
|
|
||||||
// 'Redis' => Illuminate\Support\Facades\Redis::class,
|
|
||||||
'Request' => Illuminate\Support\Facades\Request::class,
|
|
||||||
'Response' => Illuminate\Support\Facades\Response::class,
|
|
||||||
'Route' => Illuminate\Support\Facades\Route::class,
|
|
||||||
'Schema' => Illuminate\Support\Facades\Schema::class,
|
|
||||||
'Session' => Illuminate\Support\Facades\Session::class,
|
|
||||||
'Storage' => Illuminate\Support\Facades\Storage::class,
|
|
||||||
'Str' => Illuminate\Support\Str::class,
|
|
||||||
'URL' => Illuminate\Support\Facades\URL::class,
|
|
||||||
'Validator' => Illuminate\Support\Facades\Validator::class,
|
|
||||||
'View' => Illuminate\Support\Facades\View::class,
|
|
||||||
|
|
||||||
],
|
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|||||||
@ -1,55 +1,20 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Illuminate\Contracts\Http\Kernel;
|
use Illuminate\Foundation\Application;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
define('LARAVEL_START', microtime(true));
|
define('LARAVEL_START', microtime(true));
|
||||||
|
|
||||||
/*
|
// Determine if the application is in maintenance mode...
|
||||||
|--------------------------------------------------------------------------
|
if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
|
||||||
| Check If The Application Is Under Maintenance
|
require $maintenance;
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| If the application is in maintenance / demo mode via the "down" command
|
|
||||||
| we will load this file so that any pre-rendered content can be shown
|
|
||||||
| instead of starting the framework, which could cause an exception.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
|
|
||||||
require __DIR__.'/../storage/framework/maintenance.php';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
// Register the Composer autoloader...
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Register The Auto Loader
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Composer provides a convenient, automatically generated class loader for
|
|
||||||
| this application. We just need to utilize it! We'll simply require it
|
|
||||||
| into the script here so we don't need to manually load our classes.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
require __DIR__.'/../vendor/autoload.php';
|
require __DIR__.'/../vendor/autoload.php';
|
||||||
|
|
||||||
/*
|
// Bootstrap Laravel and handle the request...
|
||||||
|--------------------------------------------------------------------------
|
/** @var Application $app */
|
||||||
| Run The Application
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Once we have the application, we can handle the incoming request using
|
|
||||||
| the application's HTTP kernel. Then, we will send the response back
|
|
||||||
| to this client's browser, allowing them to enjoy our application.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
$app = require_once __DIR__.'/../bootstrap/app.php';
|
$app = require_once __DIR__.'/../bootstrap/app.php';
|
||||||
|
|
||||||
$kernel = $app->make(Kernel::class);
|
$app->handleRequest(Request::capture());
|
||||||
|
|
||||||
$response = tap($kernel->handle(
|
|
||||||
$request = Request::capture()
|
|
||||||
))->send();
|
|
||||||
|
|
||||||
$kernel->terminate($request, $response);
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user