Laravel курс с нуля, база. 25. Однометодные контроллеры

preview_player
Показать описание
Стань спонсором(бусти аккаунт), доступ к собеседованиям:

Мои платные курсы:

План развития с нуля до middle+:

Группа вк:

- Ссылка для донатов, спонсорства, пожертвований

- -

. ---
. .
Рекомендации по теме
Комментарии
Автор

После фразы "Я ввернул все как было" стало больно.

evgeniidianov
Автор

Спасибо за урок. laravel 9:
Route::group(['namespace'=>'App\Http\Controllers\Post'], function(){
Route::get('/posts', 'IndexController' )->name('post.index');
Route::get('/posts/create',
Route::post('/posts',
Route::get('/posts/{post}',
Route::get('/posts/{post}/edit',
Route::patch('/posts/{post}',
Route::delete('/posts/{post}',
});

sergeyromanov
Автор

Спасибо за полезный урок!
Роуты для 11 лары:
Route::group(['namespace' => 'App\Http\Controllers\Post'], function () {
Route::get('/posts',
Route::get('/posts/create',
Route::post('/posts',
Route::get('/posts/{post}',
Route::get('/posts/{post}/edit',
Route::patch('/posts/{post}',
Route::delete('/posts/{post}',
});
Я ничего не чистила, и оставила __invoke, просто убрала названия и квадратные скобки

katherinepogodina
Автор

Большое спасибо за серию полезных и информативных уроков! Лучший контент по laravel для вкатывающихся в тонкости фреймворка)

DieAbteilung
Автор

Андрей
54 секунды назад
8:02
У кого 10 лара в web.php пишите так:
Route::group(['namespace' => '\App\Http\Controllers\Post'], function () {
Route::get('/post', [IndexController::class, 'index'])->name('post.index');
}); - и по аналогии другие роуты так же.
Потом в самих контроллерах убираете __invoke() и ставите то же что и было в PostController. Например в IndexController должен быть public function index(), смотрите и делаете так чтобы совпадало.

RibikKill
Автор

Пусть не пугает фраза "Вернул так, как оно и было". Можно ничего не возвращать и оставлять как есть. Всё будет отлично работать)

ydsnfjt
Автор

Спасибо, за урок! Очень крутая и простая подача материала!

vimitali
Автор

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

Ваши уроки - наслаждение.

qnboegz
Автор

Для 10 версии Laravel пути такие (если хотите еще сверху можете все контроллеры через use прописать, но можно и не прописывать ибо в namespace путь уже указан):
Route::group(['namespace' => 'App\Http\Controllers\Post'], function (){
Route::get('/posts',
Route::get('/posts/create',
Route::post('/posts',
Route::get('/posts/{post}',
Route::get('/posts/{post}/edit',
Route::patch('/posts/{post}',
Route::delete('/posts/{post}',
});

dom-pirata
Автор

Ларавел 10

->group(function(){
Route::get('posts', [IndexController::class,
Route::get('posts/create', [CreateController::class,
Route::post('posts', [StoreController::class,
Route::get('posts/{post}', [ShowController::class, 'show'])->name('post.show');
Route::get('posts/{post}/edit', [EditController::class, 'edit'])->name('post.edit');
Route::put('posts/{post}', [UpdateController::class,
Route::delete('posts/{post}', [DestroyController::class,
});
еще надо зайти в RouteServeceProvide и вставить
protected $namespace = 'App\Http\Controllers\Post';
Еще надо в web.php импортировать это
use
use
use
use
use
use
use
use

Kai-xcqu
Автор

Привет!
Не помню точно, у тебя слышал, или в доках читал. В файле RouteServiceProvider.php есть переменная отвечающая за жёсткую привязку namespace контроллеров. По умолчанию она закомментирована. Отсюда у некоторых получается ошибка типа - 'Post\App\...'. Post подставляется не в то место. У меня тоже была проблема, с этим же связанная, но немного другая.

В маршрутах я пишу: IndexController::class, а не 'IndexController'. Просто чтобы не допустить опечатку. Чтобы среда не подсвечивала неизвестный ей класс, я его импортирую. В итоге, чтобы при такой записи все работало, namespace добавлять в group не нужно.

P.S. Ошибка ли это автора? Нет, конечно, и вообще здорово, что все у меня посыпалось. Начинаешь разбираться сам и соответственно лучше запоминаешь материал.
P.S.S: Благодарю за труд!

alexeyguch
Автор

Можно все контроллеры создать одной командой "php artisan make:controller Post/IndexController --invokable && php artisan make:controller Post/CreateController --invokable && php artisan make:controller Post/StoreController --invokable && php artisan make:controller Post/ShowController --invokable && php artisan make:controller Post/EditController --invokable && php artisan make:controller Post/UpdateController --invokable && php artisan make:controller Post/DestroyController --invokable".

xzingdz
Автор

Если возникла ошибка Function () does not exist или laravel идет вызов PostController измените код Route::get('/posts/create', на Route::get('/posts/create', уберите квадратные скобки, потом используйте "php artisan route:clear" "php artisan config:clear" "php artisan cache:clear" и в конце что бы востановсить все файлы "php artisan optimize", если вы используете __invoke().
Надіюсь комусь це допоможе, довго намагався знайти та виправити дану помилку.

scorptail
Автор

Так а кто будет чистить связи постов с тегами после удаления самих постов? Там или ставить on delete на fk или руками чистить.
Плюс до сих пор нет обещанного добавления записи без выбора тегов :) Ладно, идём дальше..

spitzer
Автор

Возможно кому-то поможет. Столкнулся с проблемой на которой долго завис, повторял все как автор, но на моменте 8:37 аналогичная конструкция как у автора у меня не работает Route::group(['namespace' => 'Post']

У меня laravel 10 версии(10.18.0).

Проблему решил, прописал полный путь к папке, мой рабочий пример ниже.

Route::group(['namespace' => 'App\Http\Controllers\Post'], function(){

Route::get('posts',
Route::get('posts/create',
Route::post('posts/create',
Route::get('posts/{post}',
Route::get('posts/{post}/edit',
Route::patch('posts/{post}',
Route::delete('posts/{post}',

});

Если не работает убедитесь что в ваших однометоднных контроллерах задано верное пространство имен:

namespace App\Http\Controllers\Post;

REQUEST_DRN
Автор

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

sani
Автор

Подскажите, получил ошибку Target class [App\Services\Post\Service] does not exist.
Несколько раз перепроверил, вроде все extends есть
Могли бы вы показать все взаимосвязи

OneSBeats
Автор

А разве использовать для CRUD ресурсные контроллеры не более профессионально? И в роутах одна строка вместо простыни была бы.

EvgenOl
Автор

Спасибо хороший урок, а что делать со старым PostController или такое загромождение кода это норм?

ivanteplyakov
Автор

Если не подключается попробуйте Route::group(['namespace'=> 'App\HTTP\Controllers\Post'], function(){

kjbvdwh