У меня есть промежуточное программное обеспечение, которое просто захватывает поддомен и привязывает его к модели Store
.
<?php
namespace App\Http\Middleware;
use Closure;
use App\Models\Store;
class SubDomain
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
$sub_domain = array_first(explode('.', $request->getHost()));
app()->bind(Store::class, function () use ($sub_domain) {
return Store::query()->where('sub_domain', $sub_domain)->firstOrFail();
});
return $next($request);
}
}
Однако, когда я нахожусь внутри контроллера, я пытаюсь расширить его, чтобы я могвсегда делайте $this->store->id
или что-то похожее, однако, Магазин не найден.
<?php
namespace App\Http\Controllers;
use App\Models\Store;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
/**
* @var Store
*/
protected $store;
/**
* Controller constructor.
*
* @param Store $store
*/
public function __construct(Store $store)
{
$this->store = $store;
}
}
Магазин - это просто базовая модель без данных.
Это мой маршрут:
Route::group(['middleware' => ['auth', 'sub_domain'], 'prefix' => 'admin'], function () {
Route::get('/dashboard', 'Admin\DashboardController@index');
});
И я зарегистрировал промежуточное ПО sub_domain внутри Kernel
.