Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 25.11.2016 01:38:46

AlexXYZ

Как разделить view auth для админки и сайта

Никак не пойму как для авторизации (login, register, reset, forgot) использовать разные views.
Если логинятся на сайте одини щаблоны, для админки - другие.
http://example.com/login
http://example.com/admin/login

В стандартном они находятся в resources/views/auth
И контроллеры в Http/Controller/Auth

Например роуты
Auth::routes();
Route::group(['middleware' => 'admin', 'prefix' => 'admin', 'namespace' => 'Admin'], function() {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});
Route::group(['namespace' => 'Site'], function() {
    Route::get('/', 'HomeController@index')->name('home');
});

Неужели Auth::routes(); переносить внутрь групы?
Или в LoginController.php как-то определять где на сайте или в админке и public function showLoginForm() указывать view
Как-то неочевидно всё.

#2 25.11.2016 04:19:54

Re: Как разделить view auth для админки и сайта

Про наследование и переопределение что-нить слышал? Хотя, если-бы слышал - не было-бы этого вопроса.
1. создать свои контроллеры
2. создать свои представления (views)
3. создать свои роуты
4. кушать печеньки

Не в сети

#3 25.11.2016 09:37:17

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Как разделить view auth для админки и сайта

Или можно не разделять это все на разные роуты и шаблоны, а написать посредника к примеру Admin, и в нем проверять: если пользователь админ, то перенаправлять его на роут /admin. Если нет, то на главную перенаправлять.

Не в сети

#4 25.11.2016 12:09:13

AlexXYZ

Re: Как разделить view auth для админки и сайта

Да, конечно
Только он редиректит непонятно куда и там все внутри запрятано и черт ногу сломит

#5 25.11.2016 12:39:26

AlexXYZ

Re: Как разделить view auth для админки и сайта

Вот
Route::group(['middleware' => ['admin'], 'prefix' => 'backend', 'namespace' => 'Backend'], function() {
    Auth::routes();
});
middleware - не совсем понятно какой прописывать
Получились нужные роуты
| GET|HEAD | backend/login                             | login              | App\Http\Controllers\Backend\Auth\LoginController@showLoginForm                             | web,admin,guest |
| POST         | backend/login                              |                      | App\Http\Controllers\Backend\Auth\LoginController@login                                               | web,admin,guest |
| POST         | backend/logout                            | logout           | App\Http\Controllers\Backend\Auth\LoginController@logout                                             | web,admin       |
| POST         | backend/password/email             |                      | App\Http\Controllers\Backend\Auth\ForgotPasswordController@sendResetLinkEmail    | web,admin,guest |
| GET|HEAD  | backend/password/reset            |                      | App\Http\Controllers\Backend\Auth\ForgotPasswordController@showLinkRequestForm | web,admin,guest |
| POST          | backend/password/reset             |                      | App\Http\Controllers\Backend\Auth\ResetPasswordController@reset                              | web,admin,guest |
| GET|HEAD | backend/password/reset/{token} |                      | App\Http\Controllers\Backend\Auth\ResetPasswordController@showResetForm            | web,admin,guest |
| GET|HEAD | backend/register                          |                      | App\Http\Controllers\Backend\Auth\RegisterController@showRegistrationForm              | web,admin,guest |
| POST         | backend/register                          |                      | App\Http\Controllers\Backend\Auth\RegisterController@register                                      | web,admin,guest |

'admin'      => \Illuminate\Auth\Middleware\Authenticate::class,
//'admin'      => \Illuminate\Auth\Middleware\Admin::class,

вариантов кучу перепробовал дальше с контроллерами и наследованием - редиректит непонятно куда и где это вообще контролировать

#6 25.11.2016 12:41:10

Re: Как разделить view auth для админки и сайта

Самый простой пример (это middleware):

public function handle($request, Closure $next) {
        /*
         * Если гость, нет доступа
         */
        if (!Auth::check()) {
            return redirect('noaccess');
        }
        /*
         * Если владелец, открытие страницы редактирования
         */
        if (Auth::user()->id == $request->route('user')) {
            return redirect()->route('users.edit', [Auth::user()->id]);
        }
        /*
         * Если авторизованный открывает чужой профиль, то просмотр
         */
        return $next($request);
    }

Здесь, правда, другие проверки, но смысл тот же самый. Роут подставляется в зависимости от результата проверки.

Изменено Androbim (25.11.2016 12:41:42)

Не в сети

#7 26.11.2016 07:53:11

AlexXYZ

Re: Как разделить view auth для админки и сайта

Я наверное неправильно спрашиваю, все это я знаю.

Убираю контроллеры в Http/Controller/Auth нахрен.
Переношу их в Http/Controller/Backend/Auth и соответствующие ставлю namespaces
Делаю роут
Route::group(['middleware' => ['admin', 'auth'], 'prefix' => 'backend', 'namespace' => 'Backend'], function() {
    Auth::routes();
});
Для логина выходит
App\Http\Controllers\Backend\Auth\LoginController@showLoginForm
App\Http\Controllers\Backend\Auth\LoginController@login
В middleware Auth.php пока пусто
public function handle($request, Closure $next)
{
    return $next($request);
}
Так вот при /backend/login - он меня перебрасыват на /login (тем более его уже нет, можно от него отнаследоваться по идее, но сути не меняет)
Почему, где это вообще находится?
Есть еще /app/Exceptions/Handler.php unauthenticated где return redirect()->guest('login');
А после авторизации куда и как направлять - понятно.

#8 26.11.2016 08:23:14

AlexXYZ

Re: Как разделить view auth для админки и сайта

А вообще все пошло из-за:
сделать авторизацию для админки со своими url и шаблонами, а для сайта со своими.
Может я вообще не так что-то изначально делаю?

#9 26.11.2016 08:28:00

Re: Как разделить view auth для админки и сайта

Админку сами пишете?

Не в сети

#10 26.11.2016 08:48:16

AlexXYZ

Re: Как разделить view auth для админки и сайта

Да сам
P.S.Не указал в начале: Laravel 5.3, PHP 7.08

#11 26.11.2016 08:53:37

AlexXYZ

Re: Как разделить view auth для админки и сайта

Да вроде обычная задача, запрятали все внутрь и фиг че поменяешь, раскидал эту авторизацию где только можно по файлам

#12 26.11.2016 09:00:32

Re: Как разделить view auth для админки и сайта

Я не пойму. По-идее, обычные роуты. Просто нужны проверки прав и редиректы, если что-то не так. Разве нет? Я пример Вам именно такой привел.

Насчет того, что "запрятали все внутрь" - согласен.

Вот пример, как лично я разбирался когда-то, даже "цепочку" записал, для памяти, от комментариев удержаться не мог:

"Метод sendResetLink
в контроллере
ForgotPasswordController
Использует трейт
SendsPasswordResetEmails
Там есть
sendResetLink($request->only('email'));
Которая определяется в интерфейсе
PasswordBroker
*Который (как PasswordBrokerContract) реализует класс PasswordBroker*
В
namespace Illuminate\Auth\Passwords;
Вот там и есть "лежбище"
sendResetLink
И есть там
$user->sendPasswordResetNotification($this->tokens->create($user));
А сам класс использует
CanResetPassword as CanResetPasswordContract
И вот там-то
public function sendPasswordResetNotification($token)
    {
        $this->notify(new ResetPasswordNotification($token));
    }
А вот и сам класс, экземпляр которого создается
class ResetPassword extends Notification
Вот! Тут-то и идет наследование от Нотификации.
Маразм, блин!"

Изменено Androbim (26.11.2016 09:04:21)

Не в сети

#13 26.11.2016 09:37:52

Re: Как разделить view auth для админки и сайта

Мне нужно попасть на /backend/login - вот никак пока.
Какого хрена он меня бросает на /login - непонятно
Если я меняю в /app/Exceptions/Handler.php
return redirect()->guest('login');
на
return redirect()->guest('backend/login');
зацикливает понятное дело
В 5.1 кажись было protected $loginPath = '/login'; в AuthController и по идее можно было поменять для фронта и админки раздельно
Теперь его заменил redirect()->guest('login'); я так понял

Изменено AlexXYZ (26.11.2016 09:38:41)

Не в сети

#14 26.11.2016 09:57:36

Re: Как разделить view auth для админки и сайта

Учись читать файлы по цепочке наследования. Включая Трейты.
Уверен - найдёшь.

Не в сети

#15 26.11.2016 10:05:36

Re: Как разделить view auth для админки и сайта

Я понимаю, но нахрена такой фреймворк, где элементарный вещи и стандартные довольно нужно читать по цепочке в горе файлов, которых нагородил тейлор еще и меняет от версии к версии все к черту)

Не в сети

#16 26.11.2016 10:08:22

Re: Как разделить view auth для админки и сайта

AlexXYZ пишет:

Я понимаю, но нахрена такой фреймворк, где элементарный вещи и стандартные довольно нужно читать по цепочке в горе файлов, которых нагородил тейлор еще и меняет от версии к версии все к черту)

А вот вопли отчаяния здесь никому не интересны. Если на то пошло, проблема Ваша - искусственная, "игры ума". Наворотили, а теперь жалуетесь. А там - просто все, и не нужны эти неймспейсы.

Не в сети

#17 26.11.2016 11:44:30

Re: Как разделить view auth для админки и сайта

А что тут должно быть интересно?
Ничего я не нагородил - это обычная задача.
Авторизация для админки по одному url
Авторизация для сайта или юзера - по другому url
Соответственно и шаблоны будут разные.
По умолчанию - они общие и роут один для авторизации.
Что здесь навороченного?
У меня фронт вообще не на ларавеле может быть, но для админской auth нужны пути с префиксом /admin например.

Не в сети

#18 26.11.2016 12:00:44

Re: Как разделить view auth для админки и сайта

Ну и что? А разве одна и та же форма авторизации (или для админов она другая?) не может быть расположена по разным представлениям, пусть даже и с префиксами? Пользователь/админ выполняет вход, а далее - проверка роли и соответствующий редирект. Или так сделать категорически нельзя?
Только не надо про то, что обычный пользователь, с какой-то стати будет логиниться в админку, а админ заходить во фронтенд. Но даже если и так, это ничему не помешает.
А неинтересны здесь (лично мне) негативные высказывания о фреймворке, когда что-то не получается.

Изменено Androbim (26.11.2016 12:01:50)

Не в сети

#19 26.11.2016 12:22:04

Re: Как разделить view auth для админки и сайта

Или я не понимаю или вы не понимаете, что я сделать хочу.
Не нужно мне после авторизации.
У меня авторириция чтоб была по /admin/login и /user/login
backend часть вообще в группе Route::group для backend-части
frontend часть группе Route::group для frontend-части
Это разные роуты и разные группы в файле роутов
Каким образом я сделаю авторизацию учитывая эти роуты?
В стандартном варианте четкий путь для Auth::routes();
И, собственно там
App\Http\Controllers\Auth\LoginController@showLoginForm
App\Http\Controllers\Auth\LoginController@login
У которых свои формы для логина и остальное
Auth::routes - вообще не в группах
По пути /admin/login - один контроллер авторизации выходит
По пути /user/login - один контроллер авторизации выходит
App\Http\Controllers\Auth\ - вообще ни при делах получается

Изменено AlexXYZ (26.11.2016 12:29:07)

Не в сети

#20 26.11.2016 12:30:47

Re: Как разделить view auth для админки и сайта

Я говорю вот о чем. При авторизации используется один контроллер, одна форма, один middleware. Если логинится, к примеру, админ, его редиректит в админку, если пользователь - то во фронтэнд, если ошибка, то... возможны варианты smile При этом, естественно, эта форма может располагаться в любом представлении, хоть тут login, хоть тут admin.login
Чем это Вас не устраивает?

Не в сети

#21 26.11.2016 12:38:06

Re: Как разделить view auth для админки и сайта

Так я про это и говорю и говорю чем не устраивает)
В том то и дело что один контроллер, одна форма, один middleware
views я где угодно запихнуть могу
Но нужно для админки и фронта разные
Это как в любой почти cms - админ чать со своим шаблоном формами авторизации напоминалками пароля

И дело в том, что когда я нахожусь в контроллере LoginController, то я не знаю какие views подключать, т.к. неизвестно в админ части я или на фронте.
Следовательно я хотел перенести эти auth контроллеры в соответствующие директории, но тут куча проблем вылезла

Изменено AlexXYZ (26.11.2016 12:44:01)

Не в сети

#22 26.11.2016 12:45:13

Re: Как разделить view auth для админки и сайта

Что нужно "разные"? Для пользователей один функционал, для админов - другой? Кто сказал, кстати, что нужно именно так? smile

Не в сети

#23 26.11.2016 12:53:43

Re: Как разделить view auth для админки и сайта

Вроде это не редкость, нужно вот так, в таком роде
http://joxi.ru/8An9633u4G7O2O - вход на фронт
http://joxi.ru/L21d033UBygEmX - вход в админку

Изменено AlexXYZ (26.11.2016 12:54:00)

Не в сети

#24 26.11.2016 12:54:40

Re: Как разделить view auth для админки и сайта

AlexXYZ пишет:

И дело в том, что когда я нахожусь в контроллере LoginController, то я не знаю какие views подключать, т.к. неизвестно в админ части я или на фронте.
Следовательно я хотел перенести эти auth контроллеры в соответствующие директории, но тут куча проблем вылезла

Погодите. Редиректит-то на роуты, разве нет? А нужный контроллер подключается по роуту. Я что-то не то говорю?

Не в сети

#25 26.11.2016 13:00:42

Re: Как разделить view auth для админки и сайта

а какой редирект, если я просто захожу на страницу логина?
Логина для админки - еслих очу зайти в админку и логина на сайте, если хочу зайти в личный кабинет

Не в сети

Подвал раздела