Задать вопрос
Ответы пользователя по тегу Laravel
  • Как настроить Laravel для создания простого бекенда?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    роуты почистил и всё.
    Да, часть миддлваров не будут использоваться для апи. Но разве это должно волновать? Лежат себе и лежат на диске. Там и вес-то их до килобайта не дотягивает.

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


    Ларка уже оптимизирована. Вам по умолчанию даже пакет для аутентификации по токенам включили. Просто используйте и не парьтесь.
    Ответ написан
    1 комментарий
  • Как перенести сайт на laravel?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    опен сервер пятой версии?
    два варианта
    1. выбрать ручное управление доменами, и прописать нужную директорию для сайта (/public)
    2. оставить автоматическое, но добавить в список автонаходимых директорий public

    в шестой версии просто для домена указывается нужный путь к public

    ps htaces трогать не нужно, если он стандартный для ларки и вы туда ничего сами не дописывали
    Ответ написан
    1 комментарий
  • Где хранить стили проекта при использовании модульной архитектуры?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Модульный подход не исключает использования штатной папки app и остальных, в том числе resources. Общие, базовые стили вполне могут располагаться там.

    Не совсем понял зачем так делать,

    очевидно же - для разделения. Ну самое простое - если вы решите отключить какой-то модуль, то и принадлежащие ему ассеты вам не нужны, и они не будут подключены.
    Ответ написан
    Комментировать
  • Как реализовать корзину на связке Laravel и Vue.js?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Если вы используете дефолтный входной роут /api для обмена данными, то там нет сессии.
    Если нужна сессия, то ее нужно включить соответствующим миддлваром (Как использовать сессию в API).

    Корзину можно хранить в БД, даже временную. Или в LocalStorage.
    Ответ написан
    2 комментария
  • Как убрать в Laravel Vite закрывающий слэш в link?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    В любой непонятной ситуации смотри исходники =)

    https://github.com/laravel/framework/blob/10.x/src...

    Такой тонкой настройки нет.
    Такой вариант выбран, потому что он универсален, подходит для любого доктайпа.
    Ответ написан
    3 комментария
  • Как настроить правильно аутентификацию по почте или номеру телефона?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    тут масса вариантов.

    на фронте можно два поля выводить с логикой ИЛИ
    одно из можно прятать, примерно так:

    Ваш Email: ____________
    Link: Войти по номеру телефона
    
    Ваш телефон: ____________
    Link: Войти по Email


    При клике на ссылку поле для мыла прятать и показывать поле для телефона (каждое со своей маской). Текст ссылки соответственно тоже менять на "Войти по имейл"

    На бэке как уже отметили использовать prepareForValidation. Номер телефона нормализовывать. Проще всего вырезать всё, кроме цифр и так хранить в базе. При выводе форматировать как нравится.
    А чтобы юзер не забыл, что он вводил при регистрации, восьмерку или семерку, использовать вот эту продвинутую маску https://intl-tel-input.com/ Эта библиотечка, кстати, и нормализацию делает.
    Ответ написан
    Комментировать
  • Как создать фабрики для связанных таблиц?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    class ProfilFactory extends Factory
    {
        public function definition(): array
        {
            return [
                'user_id' => User::factory(),
                // ...
            ];
        }
    }
    Ответ написан
    1 комментарий
  • Почему не работают url изображений в проектах laravel на OSPanel (OpenServer)?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    нужно слинковать хранилище в публичную директорию

    php artisan storage:link

    Симлинки, которые будут созданы этой командой, прописаны в файле config/filesystem.php.
    По умолчанию, там одна ссылка для хранилища.
    Ответ написан
    1 комментарий
  • Как использовать сессию в API?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Алексей Коновалов,
    Это значит что все запросы которые я посылаю из браузера должны проходить через web.php?


    Нет, это значит, что если вам нужна сессия в апи, то эти маршруты должны быть в группе миддлваров web.

    А если быть ещё более точным, то эти маршруты должны проходить через миддлвэр StartSession

    Если вам не требуется классический stateless api, то поменяйте в RouteServiceProvider группу маршрутов api

    Route::middleware('web')
        ->group(base_path('routes/web.php'));
    
    Route::prefix('api')
    -   ->middleware('api')
    +   ->middleware('web')
        ->group(base_path('routes/api.php'));
    Ответ написан
  • Как узнать почему письмо отправленное через Mail::send не дошло до адресата?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Насколько я помню, протокол электронной почты довольно древний. И в нем не заложено возможности определить факт доставки письма адресату. Совершенно неважно как и чем вы отправляете письмо, такой возможности нет на более низком уровне.
    Ответ написан
  • Получаю ошибку при миграций?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Каким это волшебным образом, у вас при миграциях запускаются сидеры?

    Ответ для зеленых новичков:
    Чтобы класс сидера был найден, расположите его в database/seeders/CopyUserDataSeeder.php
    и внутри файла пропишите в первой строке
    namespace Database/Seeders;
    Ответ написан
    Комментировать
  • Как сделать роутинг для страниц, добавляемых через админку?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Считать из базы все слаги, динамически зарегистировать все возможные роуты.
    Считанные слаги кэшировать. Кэш обновлять по сохранению страницы в базе.
    Такой вариант дает возможность создавать в админке любые адреса, включая корневые.

    В качестве примера:
    class DynamicRoutes
    {
      public function routes(): void
      {
        /** @var Collection $pageCollection */
        $pageCollection = getFromCacheIf(config('cache.pages'), CACHE_PAGES, function () {
          try {
            return $this->getPages();
          } catch (\Exception $exception) {
            return new Collection();
          }
        });
    
        $pageCollection->each(function (Page $page) use ($pageCollection) {
    
          $routeName = ROUTE_PREFIX_PAGE.$page->slug;
          $routeUri = $page->getAttribute('url');
    
          $parentRouteName = $page->parent_id
            ? ROUTE_PREFIX_PAGE.($pageCollection->get($page->parent_id)->slug)
            : 'home';
    
          Route::prefix($routeUri)->group(function () use ($page, $routeName, $parentRouteName) {
    
            Route::get('', static function () use ($page) {
              return App::call($page->controllerName(), ['page' => Page::findOrFail($page->id)]);
            })
              ->name($routeName)
              ->breadcrumbs(function (Trail $trail) use ($page, $routeName, $parentRouteName) {
                return $trail->parent($parentRouteName)
                  ->push($page->localizedAttribute('title'), route($routeName));
              });
    
            switch ($page->controllerName()) {
              case GalleryController::class:
                $this->galleryRoutes($routeName);
                break;
              case TourController::class:
                $this->tourRoutes($routeName);
                break;
              case NewsController::class:
                $this->newsRoutes($routeName);
                break;
            }
    
          });
    
        });
      }
    
      private function galleryRoutes(string $parentRouteName): void
      {
        Route::get('{gallery:slug}', [GalleryController::class, 'show'])
          ->name(ROUTE_GALLERY)
          ->breadcrumbs(function (Trail $trail, Gallery $gallery) use ($parentRouteName) {
            return $trail->parent($parentRouteName)
              ->push($gallery->localizedAttribute('title'), route(ROUTE_GALLERY, $gallery));
          });
      }
    
      private function tourRoutes(string $parentRouteName): void
      {
        Route::get('{tour:slug}', [TourController::class, 'show'])
          ->name(ROUTE_TOUR)
          ->breadcrumbs(function (Trail $trail, Tour $tour) use ($parentRouteName) {
            return $trail->parent($parentRouteName)
              ->push($tour->localizedAttribute('title'), route(ROUTE_TOUR, $tour));
          });
      }
    
      private function newsRoutes(string $parentRouteName): void
      {
        Route::get('{news:slug}', [NewsController::class, 'show'])
          ->name(ROUTE_NEWS)
          ->breadcrumbs(function (Trail $trail, News $news) use ($parentRouteName) {
            return $trail->parent($parentRouteName)
              ->push($news->localizedAttribute('title'), route(ROUTE_NEWS, $news));
          });
      }
    
      private function getPages(): Collection
      {
        $pages = Page::whereNotNull('slug')->get()->keyBy('id');
    
        $pages->each(function (Page $page) use ($pages) {
          $page->setAttribute('url', $this->buildUrlForPage($page, $pages));
        });
    
        return $pages;
      }
    
      private function buildUrlForPage(Page $page, Collection $pages): string
      {
        if (!$page->parent_id) {
          return $page->slug;
        }
    
        $parentPage = $pages->get($page->parent_id);
    
        return $this->buildUrlForPage($parentPage, $pages).'/'.$page->slug;
      }
    }


    router/web.php
    //...
    app(DynamicRoutes::class)->routes();
    
    Route::fallback(function () {
      return response()->view('errors.404', [], 404);
    });
    Ответ написан
    Комментировать
  • В роутах Laravel больше нельзя указывать простое (короткое) название контроллера?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    По умолчанию неймспейсы для контроллеров в роутах отключены.
    Но вы можете их добавить сами в RouteServiceProvider
    Route::middleware('web')
                    ->namespace('App\\Http\\Controllers')
                    ->group(base_path('routes/web.php'));


    Однако я этого не рекомендую.
    Используя для работы хорошую IDE вы также просто будете писать имя контроллера, а IDE подскажет какой класс нужно вставить.
    Ответ написан
    Комментировать
  • Не сохряняет значение вообще в таблицу в чем проблема может быть?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Если прямо так и написано, то ничего и не сохранится, $validatedData будет пуст. И зачем второй раз валидировать, если выше уже было?
    $validatedData = $request->validate([
                    // ... ваши правила валидации ...
                ]);


    Ну и здесь просто предположу
    $object = MyObject::create($validatedData);

    Чтобы модель получила данные, у нее должно быть заполнено поле $fillable. Модель не вижу, не знаю, как у вас.

    А так все выглядит вполне корректным.
    Ответ написан
  • Почему на сервере не загружается таблица sqlite?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    no such table


    Черным по белому написано - такой таблицы в базе нет. Почему нет? Разбирайтесь.

    Пробовала в контроллер добавить use RefreshDatabese


    Зачем? Это используется в тестировании для очистки базы перед тестом. Для очистки, Настя! Может поэтому там и нет нужных таблиц.
    Ответ написан
    2 комментария
  • Unable to locate file in Vite manifest: resources/files/info-publishing.docx. как с этим бороться?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Зачем доки в сборке? и ПДФ, и видео? Они не имеют отношения к сборке.
    Почему их просто не положить в storage?
    Ответ написан
    Комментировать
  • Как создать связь модели к конкретным моделям?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Что это за сущности - Content и ContentTag?

    Теги реализуются связями M2M

    Таблицы:
    tags
    id | text

    contents
    id | content | …

    content_tag
    tag_id | content_id

    class Content extends Model {
      public function tags(): BelongsToMany {
        return $this->belongsToMany(Tag::class);
      }
    }
    
    class Tag extends Model {
      public function contents(): BelongsToMany {
        return $this->belongsToMany(Content::class);
      }
    }
    
    dd($content->tags);


    PS
    А если предполагается наличие других сущностей, подлежащих тегированию, то необязательно под каждую делать отдельную таблицу тегов. Можно воспользоваться полиморфными связями.

    PPS
    Подробности в документации. https://laravel.com/docs/10.x/eloquent-relationships
    Ответ написан
    2 комментария
  • Как в реквесте валидировать id сущности?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    При использовании биндинга вы получите 404 при некорректном ID
    Кроме того, вам не нужно получать модель в контроллере, она сразу туда попадет.

    Route::post("article/{article}", [ArticleController::class, 'update')
        ->name('article.update');
    
    class ArticleController extends Controller
    {
        public function update(Article $article, ArticleUpdateRequest $request)
        {
            $article
                ->fill($request->validated())
                ->save();
    
            return redirect(route('article.edit', $article));
        }
    }
    Ответ написан
  • Почему Route отсылает на базовую страницу?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    не очень понял проблему, но в логике явно косяк, видимо, опечатка в условиях

    Route::name('user.')->group(function(){
      //Route::view('/private','priv')->middleware(('auth'))->name('private');
      Route::view('/private','priv')->middleware(['auth'])->name('private');
    
      Route::get('/login',function(){
        if(Auth::check()){
          return redirect(route('user.private'));
        }
        return view('loggin'); // Вынести из условия
      })->name('login');
    
      Route::get('/reg',function(){
        if(Auth::check()){
          return redirect(route('user.private'));
        }
        return view('reg'); // Вынести из условия
      })->name('reg');
    });
    Ответ написан
  • Как в Laravel в Factory передать доп атрибуты?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Незачем в фабрику передавать
    Прямо в сидере

    use Illuminate\Database\Eloquent\Factories\Sequence;
    
    public function run()
      {
        $list = ['secret1','secret2','secret3']; //получаем список данных;
        shuffle($list); // Перемешиваем
    
        Order::factory(20)
          ->state(new Sequence(function () use (&$list) {
            return ['secret_id' => array_pop($list)];
          }))
          ->create();
      }
    Ответ написан
    5 комментариев