Задать вопрос
  • Какую книгу по созданию приложений на PHP выбрать?

    @survivor2005
    Странно, вы хотите что то типа fullstack? Я увидел там что то про вёрстку, если вам полностью надо самому сделать приложение, то как бэ нужно не только php. Даже вёрстка не спасёт, так как ещё понадобится js, к тому же никто не отменял знания БД. Вам самое важное что надо понять это взаимодействие клиент-северной технологии. Запрос-ответ. Вот что то нагуглил. ссылка, но лучше изучать отдельно все. Затем делать простые вещи и по нарастающей. Потом придёте к фреймворкам все равно. Но базу знать надо!
    Ответ написан
    Комментировать
  • Не понимаю как работает router.beforeEach во vue?

    @survivor2005 Автор вопроса
    Вот может кому пригодиться, решение не идеальное, но работает:
    import { createRouter, createWebHistory } from 'vue-router'
    import Logon from '@/Logon.vue'
    import Projects from '@/views/Projects.vue'
    import Homepage from '@/views/Homepage.vue'
    import Project from '@/views/Project.vue'
    import Control from '@/views/Control.vue'
    import ControlUsers from '@/views/Control-users.vue'
    
    const routes = [
      {
        path: '/logon',
        name: 'Logon',
        component: Logon
      },
      {
        path: '/',
        name: 'Homepage',
        component: Homepage
      },
      {
        path: '/projects',
        name: 'Projects',
        component: Projects
      },
      {
        path: '/project',
        name: 'Project',
        component: Project
      },
      {
        path: '/control',
        name: 'control',
        component: Control
      },
      {
        path: '/control/control-users',
        name: 'control-users',
        component: ControlUsers
      }
    ]
    
    const router = createRouter({
      history: createWebHistory(process.env.BASE_URL),
      routes
    })
    
    let isAuth = false
    
    router.beforeEach((to, from, next) => {
      if (to.name !== 'Logon' && !localStorage.getItem('authToken')) {
        next({ name: 'Logon' })
      } else next()
    })
    
    router.beforeEach(async (to, from, next) => {
      if (localStorage.getItem('authToken') && !isAuth && to.name !== 'Logon') {
        const request = await fetch('http://localhost:8000/api/authuser', {
          method: 'POST',
          credentials: 'same-origin',
          headers: {
            'Content-type': 'application/json',
            Authorization: localStorage.getItem('authToken')
          }
        })
        const response = await request
        if (response.status === 200) {
          isAuth = true
          next(to.fullPath)
        } else next({ name: 'Logon' })
      } else next()
    })
    
    export default router
    Ответ написан
    Комментировать
  • Почему не устанавливаются пакеты в laravel через Composer?

    @survivor2005 Автор вопроса
    Короче я нашел ответ, я сам по сути виноват, пытался прописать композер в переменные среды. В итоге после удаления записи у меня все пошло как надо.
    Ответ написан
    Комментировать
  • Как разрешить Cors на laravel?

    @survivor2005 Автор вопроса
    Всем сорри я просто походу тупанул нужно было зарегистрировать мидлдвер в разделе АПИ, а не в разделе мидлевер. И все зарботало. Прилагаю скрин файла kernel.php. Обратите внимание в каком разделе зарегистрирован Cors.php
    <?php
    
    namespace App\Http;
    
    use Illuminate\Foundation\Http\Kernel as HttpKernel;
    
    class Kernel extends HttpKernel
    {
        /**
         * The application's global HTTP middleware stack.
         *
         * These middleware are run during every request to your application.
         *
         * @var array
         */
        protected $middleware = [
            // \App\Http\Middleware\TrustHosts::class,
            \App\Http\Middleware\TrustProxies::class,
            \Fruitcake\Cors\HandleCors::class,
            \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
            \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
            \App\Http\Middleware\TrimStrings::class,
            \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        ];
    
        /**
         * The application's route middleware groups.
         *
         * @var array
         */
        protected $middlewareGroups = [
            'web' => [
                \App\Http\Middleware\EncryptCookies::class,
                \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                \Illuminate\Session\Middleware\StartSession::class,
                // \Illuminate\Session\Middleware\AuthenticateSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                \App\Http\Middleware\VerifyCsrfToken::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],
    
            'api' => [
                'throttle:api',
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
                \App\Http\Middleware\Cors::class,
    
            ],
        ];
    
        /**
         * The application's route middleware.
         *
         * These middleware may be assigned to groups or used individually.
         *
         * @var array
         */
        protected $routeMiddleware = [
            'auth' => \App\Http\Middleware\Authenticate::class,
            'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
            'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
            'can' => \Illuminate\Auth\Middleware\Authorize::class,
            'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
            'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
            'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
            'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
            'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        ];
    }
    Ответ написан
    1 комментарий
  • Как удалить товар после предупреждения?

    @survivor2005 Автор вопроса
    В общем решил так: Предварительно проставил айдишники у кнопок товара в цикле
    const productRemoveBtn = document.querySelectorAll('[data-product=remove-product]'); //кнопка удаления у продукта
        const modalRemoveBtn = document.querySelector('[data-remove=remove]'); //Кнопка подтвреждения удаления у модального окна
        let currentTarget = null;
        for(let prb of productRemoveBtn) {
            prb.addEventListener('click', function(){
                currentTarget = prb;
            });
        }
          modalRemoveBtn.addEventListener('click', function(){
              currentTarget.form.submit();
          });
    Ответ написан
    Комментировать
  • Объединить 2 таблицы БД?

    @survivor2005 Автор вопроса
    Решил проблему конкатинацией.
    SELECT product.*, GROUP_CONCAT(images.image_src) AS img from product left join images on images.prod_id=product.id GROUP BY product.id
    Ответ написан
    Комментировать
  • Куда отправлять данные из формы?

    @survivor2005 Автор вопроса
    Спасибо за ответы, все получилось, скрытые формы с атрибутами оказались не нужны, просто указываем в форме в атрибуте action название обработчика например action="/cart" и в точке входа отлавливается по пути и передается управление
    <?php
                    //присвой массив строк в адресной строке разделенные "/";
                    $parts = $controller->getDataURI(); 
    
                    //присвой первую строку из адресной строки после символа "/" если существует иначе дай строку Index;
                    $ctrl = $parts[1] ?: 'Index'; 
    
                    //присвой Класс контроллера отвечающий за переданную строку;
                    $class = 'Classes\Controllers\\' . ucfirst($ctrl); 
    
                    //инициализация класса контроллера
                    $ctrl = new $class;
    
                    //вызов метода __invoke у вызванного контроллера
                    $ctrl();
                    ?>
    Ответ написан
    Комментировать
  • Как правильно прописывать media запросы?

    @survivor2005
    В отдельном файле не удобно, потом не понятно где что, понятнее всего в конце компонента, разбивайте вёрстку на компоненты, так будет понятнее всего, и код будет маленький и понятный, легко поддерживать. Тут тоже не без минусов, повторяющиеся код, но это оправдано.
    Ответ написан
    Комментировать
  • Из чего составлять портфолио верстальщику?

    @survivor2005
    Даже если вы все сделаете, сомневаюсь что возьмёте заказ, долю фриланса как правило выигрывают старички с многолетний опытом и огромным портфолио, второй момент, что заказов на чистую вёрстку мало, поэтому можете сразу приступать к вечному изучению всякой Х...ни. Типа jquery, bootstrap, WordPress, как это выучите пройдёт не мало времени ), а вам уже придется углубляться в js, затем vue, react. В общем гиблое это место честно говоря. Парадокс в том, что туда кажется что можно зайти новичку, но в итоге по факту что б там взять опять же (копеечный) заказ, нужно иметь серьёзную базу и выделиться из куча других портфолио. Но когда у вас будет эта база и отличительное портфолио, то вам уже не захочется работать за еду и логичнее идти устраиваться на работу, где у вас будет определённый стэк и не надо бошку ломать что ж ещё учить мне дальше.
    Ответ написан
  • Правильные CSS стили верстки?

    @survivor2005
    Не рекомендуется задавать, но порой никак без этого, в основном касается блоков, за которые вы уверенно можете сказать, что они не могут быть большей высоты чем вы сделали, например блок, в которой лежит картинка, типа карточка товара. На практике эти элементы обычно не больших размеров, например при любом раскладе нужно указывать высоту псевдоэлементам бефор и афтер. Вам поможет любая книга по css https://www.ozon.ru/context/detail/id/147815952/?u...
    Ответ написан
    Комментировать
  • Всегда ли нужно использовать id и class?

    @survivor2005
    Я не знаю честно говоря как все таки лучше, на практике я столкнулся с такими вещами, сначала БЭМ мне навязал мнение, что каждой пукалке обязательно давать класс, ну я так жил, честно говоря мне это не особо нравилось, уже сложно было генерировать имена, так как порой и не приходит в голову как назвать класс. Затем я на бэкэ столкнулся с тем, что мне надо было в бд хранить текст, но при выводе его на страницу, он должен был быть стилизован, более того, нужно было создать форму отправки текста в бд. Как допустим эта форма, в которой я пишу на данный момент. Если приглядеться, то чуть выше есть кнопочки b, i, и т д. Так вот если их нажать, то текст обернет тегами без каких либо классов. Соответственно текст попадает в бд с тегами, но без классов. Из этого следует что ксс написан таким образом, что в основном классы даются главным блокам, а дети получают стиль от родителя. Что то типа .header > div{color:white} , .header>p{color:red} . Ну и т д. Мне так стало проще. Но и тут конечно есть минусы. Например у scss препроцессора есть наследования, @extend который принимает название класса. И не принимает такие цепочки от родителей. Но я не парюсь, пока без них обходился.
    Ответ написан
    Комментировать
  • Имеет ли смысл в 2020-м году входить в веб?

    @survivor2005
    Сложно, я начал года 4 назад, до сих пор тяжело заработать, сначала изучал фронт, потом понял, что без бэка только на дядю, сейчас изучаю бэк. Слишком уж много технологий, то что я знаю язык разметки, js, php, это ещё не все, там и базу данных надо знать и как устроен веб сервер и уметь конфигурировать его. Я уже не говорю про фреймворки, сборщики и препроцессоры. В общем уйдут годы если хотите не зависить ни от кого. Либо учите что то одно либо фронт либо бэк и идёте на работу, либо находите кого нибудь из фронта или бэка и вместе делаете работу. Но тут ещё заказчиков надо найти и портфолио сделать.
    Ответ написан
    Комментировать
  • Где можно немного подработать простенькой вёрсткой?

    @survivor2005
    Сорри но нигде, надо двигать дальше, если не хочешь что б в пустую было потрачено время на изучения вёрстки. Но до подзаработать ещё далеко...
    Ответ написан
    Комментировать
  • Где учиться веб-разработке?

    @survivor2005
    Мне в книгах не всегда понятно, а время перебирать все книги нет, поэтому я все таки азы получил по онлайн курсам, затем можно почитать книги, поуглубляться в темы так сказать. Сейчас учусь в pr-of-it.ru. Просто не надо учиться у кого попало, я сначала учился у великого Борисова в специалисте. Сейчас он ушёл оттуда. После него мне понравился только Альберт Степанцев из профит ру
    Ответ написан
    Комментировать
  • Насколько защищены файлы php от просмотра?

    @survivor2005
    Я надеюсь что пароль захэширован и к нему есть соль
    Ответ написан
  • Какой план изучения Front-end`a на junior?

    @survivor2005
    Я делал так: сначала качал видео курсы от специалиста по html css, 3 уровня с флексами и гридами. Затем практиковал, верстал макеты. Затем спустя где то пол года, хотя это наверное многовато, но я хорошо освоил вёрстку с scss.
    После этого качал курсы от Борисова js, первый и второй. Затем даже пошёл к нему на курсы, но сейчас он уже не работает в специалисте. После начал читать learn.javascript.ru. И практиковал все примерно год. Все таки тяжело заходил в свои 32 язык программирования. После освоил гит, гальп, jquery, пробовал реакт, но пока не зашёл, а вообще надо бы. На данный момент прошёл у борисыч 3 курса php. На самом деле очень хорошо когда в голове есть полная картина стэка. Начинаешь понимать где вообще нужен js, а где он лишний. В общем пока плотно сижу на бэкэнде. Стараюсь перестроить мозг на ООП.
    Ответ написан
    Комментировать
  • Как стать топовым WEB разработчиком?

    @survivor2005
    Когда то я тоже выучил html css и думал ну щас попрёт)))). Прошло пару лет, типа знаю js, типа знаю php, и что изменилось? Ничего)))) Надо ещё учить фреймворки и библиотеки , почему? Потому что на нативке замонаешься писать интернет магазин в одиночку. Это надо как минимум наработать свою библиотеку, это надо наработать опыт в проектировании. Ну и куча всего, что может автоматизировать повседневные задачи. Если ты молод и готов пахать ежедневно изучая веб технологии, то через пару лет что то из тебя выйдет, если не хочешь, то советую просто изучить конструктор. Например вордпрес. И через недельку будешь делать интернет магазины.
    Ответ написан
    1 комментарий
  • Как прижать Footer к низу страницы?

    @survivor2005
    А что за двойные квадратные скобки, это в чем так модули подключаются? На счёт прижать футер я хз, старый способ типа html, body,
    .wrapper: height 100%;
    Ответ написан
  • Стоит ли мне как начинающему back-end разработчику знать хотя бы основы HTML/CSS?

    @survivor2005
    А вдруг придётся написать что то типа echo "<div>хочу в отпуск!</div>" вот тебе и основы)
    Ответ написан
    2 комментария
  • Чем список лучше div блока?

    @survivor2005
    Делается для читабельности кода и для поисковиков это плюс. Списки более значимые для поисковика нежели див.
    Ответ написан
    Комментировать