Слишком мало аргументов для функции App \ Http \ Controllers \ AccountsController :: index (), 0 передано и ровно 1 ожидается в laravel - PullRequest
0 голосов
/ 21 января 2020

Сессия уничтожается после успешного входа в систему или произошла ошибка с защитником, который не смог сохранить сеанс. Когда запрашивается your_session_key в представлении панели мониторинга, он предоставляет нулевое значение.

Route::group(['prefix' => 'admin'], function () {
    Route::namespace('Admin')->group(function () {
        Route::group(['middleware' => ['admin_middle','auth:admin']] , function () {
            Route::get('accounts/', 'AccountsController@index')->name('admin.accounts');
        });
    });
});

Промежуточное программное обеспечение:

class RedirectIfNotAdmin
{
    public function handle($request, Closure $next, $guard = 'admin')
    {
        if (!auth()->guard($guard)->check()) {
            $request->session()->flash('error', 'You must be an Admin to see this page');
            return redirect(route('auth.admin.login'));
        }

        return $next($request);
    }
}

Guard: config / auth. php // Custom Guard

'guards' => [
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],

AccountsController:

class AccountsController extends Controller
{

    public function __construct(AdminRepositoryInterface $adminRepository) {
        $this->adminRepo = $adminRepository;
    }

    private $adminRepo;
    public function index(int $id)
    {
        $admin = $this->adminRepo->findAdminById($id);
        $talentRepo = new AdminRepository($admin);
        return view('admin.accounts');
    }
} 

AdminRepositoryInterface: App \ Shop \ Admins \ Репозитории \ Интерфейсы \ AdminRepositoryInterface;

interface AdminRepositoryInterface extends BaseRepositoryInterface
{
    public function findAdminById(int $id) : Admin;
}

AdminRepository: App \ Shop \ Admins \ Repositories \ AdminRepository

class AdminRepository extends BaseRepository implements AdminRepositoryInterface
{
    public function findAdminById(int $id) : Admin
    {
        try {
            return $this->findOneOrFail($id);
        } catch (ModelNotFoundException $e) {
            throw new AdminNotFoundException($e);
        }
    }
}

Просмотр: admin \ accounts.blade

@if (Session::has('YOUR_SESSION_KEY'))
{{-- do something with session key --}} 
@else
{{-- session key does not exist  --}} //this has been printed is the ID variable is not passed
@endif
{{$admin->name}}
<br />{{$admin->email}}

1 Ответ

1 голос
/ 21 января 2020

Ваш контроллер ожидает идентификатор, но у вашего маршрута нет параметров.

Как вы указали в комментариях, вы хотите получить идентификатор сеанса.

Вы можете получить что-то из сеанса, используя $value = session('key');

контроллер должен выглядеть следующим образом:

public function index()
{
    $id = session('nameOfSessionKey');
    $admin = $this->adminRepo->findAdminById($id);
    $talentRepo = new AdminRepository($admin);

    return view('admin.accounts');
}

Подробнее о сеансах см. в документации Laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...