Добрый вечер. На старте создания небольшого приложения(далее - my application) столкнулся с трудностью организации папок в laravel. Буду благодарен, если вы поможете разобраться в следующих вопросах:
1) Я решил вынести my application в отдельную папку. Это лучше сделать в корневой папке сайта или в папке vendor?
2) Хочу, чтобы у my application был свой route, как к нему правильно строить маршрутизацию? Мой колхозный вариант: создаем route в папке my application, прописываем там необходимые роуты, далее делаем рекваер в routes/web.php, при этом route обращается к папке App\Http\Controllers, из-за чего приходится переписывать пути.
3) Если я вынес приложение в отдельную папку, получается, что все связанные с ним файлы, включая views, css, js, cache и т.д должны находится в этой папке?
p.s Прошу не закидывать за второй пункт, а объяснить правильный подход.
Если задать вопрос правлиьно, то и ответы сами появятся на горизонте.
Не Как организовать свое приложение в laravel?, а Как создать свое приложение, используя laravel?.
use App\Http\Controllers\Backend\Auth\User\UserController;
Route::get('edit', [UserController::class, 'edit'])->name('user.edit');
Route::patch('/', [UserController::class, 'update'])->name('user.update');
и посмотри на копипасты простней кода в вьюхах вместо ужасных ларавелевских компонентов и слотов. И на кучи евентов для стандартных методов. И на методы create/update в репозиториях. И на проверку прав доступа через if ($this->roleExists($data['name'])) короче есть на что посмотреть. А ларавел с его ковнокодом и решениями - это путь в никуда)
подключает в файле роутов контроллеры, хотя Ларавел хочет чтобы ты этого не делал если посмотреть на RouteServiceProvider и доки. сюдаже почти автоматом добавляются политики, обсверверы и т.д. этот наплодил какие-то свои методы. Но там копипаста кода уже много о качестве пакета говорит
jazzus, ты можешь более подробно объяснить, чем ты не доволен?
Я не понял пример с роутами.
Что тебя смущает в роутах вида
/*
* Frontend Access Controllers
* All route names are prefixed with 'frontend.auth'.
*/
Route::group(['namespace' => 'Auth', 'as' => 'auth.'], function () {
// These routes require the user to be logged in
Route::group(['middleware' => 'auth'], function () {
Route::get('logout', [LoginController::class, 'logout'])->name('logout');
// These routes can not be hit if the password is expired
Route::group(['middleware' => 'password_expires'], function () {
// Change Password Routes
Route::patch('password/update', [UpdatePasswordController::class, 'update'])->name('password.update');
});
// Password expired routes
Route::get('password/expired', [PasswordExpiredController::class, 'expired'])->name('password.expired');
Route::patch('password/expired', [PasswordExpiredController::class, 'update'])->name('password.expired.update');
});
// .....
Северное Сияние, я выше написал, что смущает. И написал код как нужно. Что тебе не понятно? Вместо функционала фреймворка придумываются свои велосипеды плохого качества. См раздел роутов, ресурсных контроллеров и RouteServiceProvider.
Северное Сияние, вообще лучше все изучить т.к. фишка ЛАравел, что весь функционал взаимосвязан и потом обидно будет, когда напишешь свои проверки доступа через if, а потом узнаешь, что к ресурсным контроллерам автоматом подключаются политики и зря писал код.
100 контрибьютеров, 4 к звёзд и 2500 коммитов - это "какой-то чувак"? Ну ладно, наверно ребята просто не знают))
Что тебе не понятно?
вообще ничего. Я тебя и прошу КОНКРЕТНЫЙ пример из этого решения, где тебе, как кажется, все плохо и ужасно.
И написал код как нужно
я нихера не понял, что ты там написал. Возьми пример выше, который я привел и приведи его в вид, который должен быть согласно фреймворку.
Я вообще не понимаю, что вы хотите тут сказать.
Все код идентичны функционалу фреймвока.
Северное Сияние, так пролистай вверх и увидишь КОНКРЕТНЫЕ примеры с КОДОМ. В вопросе твоем про роуты также КОНКРЕТНЫЙ ответ как писать роуты. В этом пакете отсебятина, говнокод, идиотская структура и минимальное использование Laravel.
нужно $this->authorize('update', $user);
или вообще на все методы
public function __construct()
{
$this->authorizeResource(User::class, 'user');
}
Вместо кучи эвентов на created updated deleted нужно использовать обсерверы
Вместо копипасты кода в шаблонах, нужно разбивать их на части и компоновать с использованием Blade директив
Route::resources - это просто синтаксический сахар, умеющий делать болванку для типичных CRUD-операций. И всё. Слово НУЖНО тут не уместно. Роуты в процессе разработки мигрируют и искажаются, не факт что тебе хватит функционала этой чудо-приблуды.
нужно
$this->authorize('update', $user);
У меня нет кода под рукой, но есть мнение, что ты путаешь систему ролей и авторизацию.
Вместо копипасты кода в шаблонах, нужно разбивать их на части
если есть копипаста - значит, это нужно. Не всегда идентичный участок кода нуждается в отдельном файле и общем подключении. Скорее всего, это болванка-шаблон, которая, подразумевается, будет изменена. И да - директивы там используются.
Не кому, а где. Ответ – там. В его 100% ресурсных роутах и методах нужны ресурсные роуты, контроллеры, политики, реквесты и обсерверы. Там это НУЖНО, но ты МОЖЕШЬ делать по-другому.
Route::resources - это просто синтаксический сахар
В Ларавел все сахар и песня. В этом и фишка фреймворка. т.к. вместо 100 строк отсебятины ты пишешь 10 коротких понятных людям фраз. Можно конечно всю эту ларавелевскую ахинею не использовать и заменить своими эффективными решениями. Или стать счастливым обладателем пакета какого-то чувака.
У меня нет кода под рукой, но есть мнение, что ты путаешь систему ролей и авторизацию.
Система ролей и пермишенов не авторизацией занимается? Или аутентификацией? У меня код под рукой. С помощью roleExists он вообще валидацию делает
if ($role->name !== strtolower($data['name'])) {
if ($this->roleExists($data['name'])) {
throw new GeneralException('A role already exists with the name '.$data['name']);
}
}
Фигачит такие проверки в методах create update и т.д.. Хотя нужно валидировать и возвращать сообщения в реквесте. Политики авторизации и пермишены вообще не использует. Все проверки с помощью isAdmin. Так можно делать, но если ты захочешь добавить второго чела в админку с правами поменьше тебе придется переписывать все эти проверки во всех файлах.
если есть копипаста - значит, это нужно.
Кому нужно? Мне нет. Я код никогда не дублирую, чего и тебе желаю. Тем более стыдно такое делать в шаблонах с таким удобным шаблонизатором как в Ларавел. В этом пакете тоже нахер не нужно.
П.с. а евенты для created updated чего не прокомментировал? и use App\Http\Controllers\Backend\Auth\User\UserController в файлах роутов