• PSR-0 или PSR-4, и как правильно построить структуру проекта?

    27cm
    @27cm
    TODO: Написать статус
    Первый вопрос который меня интересует это PSR-0 или PSR-4. На сколько я понял по состоянию на 21 октября 2014 года PSR-0 был помечен как устаревший.

    PSR-4 не замена PSR-0, а дополнением к нему.
    github.com/php-fig/fig-standards/blob/master/accep...


    про PSR-3 я вообще как-то не нашел русскоязычной информации, словно такого стандарта нет

    Видать, не перевели. Читайте в оригинале:
    github.com/php-fig/fig-standards/blob/master/accep...


    /path/to/project/ это путь к проекту и данный путь нигде не фигурирует, это та директория из которой запускается основной index.php

    Да, это пусть к PHP файлам проекта. Но index.php обычно выносят в отдельный каталог (например, /public), а все классы проекта хранятся, например, в /src (или /lib или ещё как угодно). В конфигурации веб-сервера запрещают отправлять запросы к любым файлам, не лежащим в /public, благодаря этому /public/index.php является единственной точкой входа для внешних запросов.


    ./vendor это папка назначение которой я не понимаю

    Это папка для сторонних библиотек, используемых в вашем проекте. Используется composer'ом. Внутрь лезть особо причин нет, composer сам решит как ему там всё разложить. Свои классы вы туда тоже не должны писать.


    в итоге честно говоря я запутался в том как правильно надо строить свои каталоги, какие папки обязательные какие нет, когда использовать src, когда lib, когда tests, почему в некоторых структурах приходится дважды указывать имя поставщика и имя пкета и т.д.

    src и lib - скажем так, синонимы. Кому как больше нравится. Главное, что внутри лежат сами PHP файлы проекта, следующие стандарту PSR-4. Лежат там только файлы, написанные авторами проекта. Поэтому нет смысла класть vendor внутрь src (или lib).
    test - каталог для тестов проекта.
    В папке vendor имя поставщика и имя проекта могут совпадать, вот они и дублируются.

    Так как вы изобретаете свой велосипед, то и структуру каталогов делайте свою, или посмотрите на популярные CMS/фреймворки, но везде будет по-разному. Joomla, WordPress, Yii, Zend Framework, Symfony.

    Я придерживаюсь такой структуры:
    /config                     Глобальные настройки проекта.
    /data                       Временные файлы. Например:
    /data/cache	            Файлы кеша.
    /data/logs	            Логи.
    /data/tmp	            Прочие временные файлы.
    /module                     Модули проекта. Например:
    /module/Backend	        
    /module/Backend/config      Настройки модуля.
    /module/Backend/src	    Файлы PHP модуля. Например:
    /module/Backend/src/Backend/Path/To/ExampleClass.php
    /module/Backend/test	    Unit-тесты модуля.
    /module/Backend/view	    Шаблоны модуля.
    /module/Frontend/...
    /public/index.php
    /public/css
    /public/font
    /public/img
    /public/js
    /vendor


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

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    https://jsfiddle.net/Ankhena/Lqsftvxd/

    div {
      position: relative;
      width: 80%;
      height: 200px;
      margin: auto;
      background: linear-gradient(to bottom, yellow, orange);
    }
    
    div::before,
    div::after {
      content: "";
      position: absolute;
      bottom: 0;
      width: 50%;
      height: 50px;
    }
    
    div::before {
      background: linear-gradient(to right top, #00f 49.3%, transparent 50.8%);
    }
    
    div::after {
      right: 0;
      background: linear-gradient(to left top, #00f 49.3%, transparent 50.8%);
    }
    Ответ написан
    Комментировать
  • Как вы поддерживаете фикстуры актуальными?

    Maksclub
    @Maksclub
    maksfedorov.ru
    Есть дополнение к Gii от Елисеева,
    в частности оно умеет из актуальной базы формировать файл с массивом данных для модели
    https://github.com/ElisDN/yii2-gii-fixture-generator

    Подробнее -- делаешь фикстуры, потом доработал БД и руками че-то наполнил... и все фикстура выдохлась
    тогда еще раз через gii выкатил актуальную инфу в файл и готово :)
    Ответ написан
    Комментировать
  • Стартап: где найти человека, который контактирует с потенциальными клиентами?

    Kulver_stukas
    @Kulver_stukas
    Вариант 1) могилка вашего стартапа пополнит кладбище "идей", задуманных технарями и не нашедших своего покупателя
    Вариант 2) Вы бросите заниматься технической стороной проекта и все силы бросите на поиски спонсора/инвестора/партнера который обеспечит вам маркетинг и продажи

    PS: выполнение вар.2. не гарантия того что в конечном счете все равно исполнится вар.1
    Ответ написан
  • Как вывести результат валидации в отдельном месте, Yii?

    slo_nik
    @slo_nik Куратор тега Yii
    Доброе утро.
    Исправьте <?=$form->errorSummary($model);?> на <?=$model->getErrors();?> и выводите в любом месте вёрстки.
    Или, в Вашем варианте, добавьте вторым параметром массив, где и укажите, как выводить и где выводить.
    www.yiiframework.com/doc-2.0/yii-widgets-activefor...
    Ответ написан
    Комментировать
  • Градация уровня знаний в языках программирования. Каковы различия и требования?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Градация джунов, мидлов и сеньоров - это часто возникающий на Тостере вопрос. Я на него уже несколько раз отвечал.

    Касательно конкретно сроков, это зависит как от области деятельности, так и самого специалиста. Чрезвычайно талантливый и трудолюбивый специалист может за 5 лет взлететь до сеньора Java EE, а другой может 15 лет угробить на рост до мидла в PHP.

    Я для себя решил так, буду себя сеньором считать тогда, когда на конференциях выступать начну.
    Ответ написан
    7 комментариев
  • Как массив разделить на 2 группы?

    @Batlab
    PHP Senior | Python Middle | JS Junior
    И никакого foreach не нужно.
    $result = array_chunk($array, 2));
    Ответ написан
    Комментировать
  • Как достичь большого КПД от выполняемой работы и заказов?

    Отвечу скорее всего как смежное звено, попытаюсь сам структурировать инфу, ну и может натолкну кого на мысли.

    У меня несколько человек, с которыми я постоянно работаю (около 7). От них идут постоянные заказы (довольно объемные и тд). Теперь к сути вопроса.

    Что я делаю:
    1. Все задачи, все заказчики мне кидают в Trello. Там же они обозначаются по степени важности.
    2. Бывает что это задачи что-то поправить и тд, мелочи в общем. Как раз на таких мелочах и тратится большая часть времени, поэтому указываем степень важности.
    3. Выполнил задачу, перенес ее в категорию Сделано. Клиент сам потом проверяет еще раз, все ли нормально, после чего там же, если нужно, пишет замечания и тд. Все это дело всегда мне доступно из приложения, либо с десктопа, уведомления и тд - полезная вещь. В общем на пустую болтавню время мы не тратим.

    Это что касается мелких задач. Если речь касается проектов.

    1. Присылается ТЗ, обсуждение. На этом этапе как раз львиная доля времени и тратится, но без этого никак. После чего просто по пунктам ТЗ я выполняю работу, что-то пропускаю, если тратится много времени и это можно пропустить.
    2. Отчитываюсь о промежуточной работе, присылаю тз с выделенными фрагментами, что сделал. Обсуждаю неясности, если они есть.
    3. Второй самый жрущий время этап - допиливание, тут обычно все дело затягивается на несколько дней (ждешь что-то от заказчика, он что-то ждет от дизайнера и тд). Как правило весь проект на этом этапе сделан, нужно только отрихтовать.
    4. Если проект действительно сделан и все мелочи остались за заказчиком, то делаю самые простые задачи из следующего проекта. Считаю что любой проект можно разбить на подпроекты, их в свою очередь еще на более простые задачи. В общем дробление - наше все.

    По тайм-менеджменту ничего толкового не скажу, сам пытаюсь с ним разобраться, однако советую:
    1. работать строго по определенному графику (обычный рабочий или ваш личный, главное чтобы кол-во рабочих часов было адекватным).
    2. бывает что нужно что-то делать в ночь, потому что что-то произошло, если вина ваша - работаете и все, если заказчик предлагает вам допилить в 5 утра новый модуль потому что он про него забыл, а сдавать уже в 7 утра, поднимаете цену за проект и работаете, либо отказываетесь это делать (чревато чем угодно).
    3. Для увеличения КПД вашего собственного нужно отдыхать. Обязательно прогулки на улице 1-1.5 часа в день. Помогает разгрузить голову и не будет проблем со здоровьем (как человек, который на этом попался и получил целый букет псих. расстройств - настоятельно рекомендую), физические нагрузки, и не забывайте про глаза. Каждый 40-60 минут дайте отдохнуть глазам (можно делать 5минутную гимнастику).

    По ценам и срокам, тут уже как каждый горазд. Я смог немного набить руку и просто прочитав тз озвучиваю цену + 10-15% на случай непредвиденных правок и тд. Кто-то рекомендует за каждый пункт тз назначать цену, но я считаю это не всегда выигрышным вариантом, потому что получить адекватное ТЗ - подарок.

    P.S мог многое упустить, поэтому отвечу уже в комментах, если потребуется.
    Ответ написан
    7 комментариев
  • Как правильно отправить форму через ajax?

    proudmore
    @proudmore
    Сделайте ajax валидацию формы и дело с концом. Submit будет срабатывать только на заведомо верных данных, вот и все.
    Ответ написан
    7 комментариев
  • Как анимировать сложные сайты (типа awwwards)?

    @GreatRash
    На сайтах из списка Awwwards люди подходят к анимации сугубо индивидуально. Это может быть и canvas, и SVG, и WebGL, и просто анимированные дивы, и комбинация всех подходов одновременно.
    Ответ написан
    2 комментария
  • Как такое реализовать?

    Vlatqa
    @Vlatqa Куратор тега CSS
    й
    Ответ написан
    Комментировать
  • Плохо ли из page.html делать page.php?

    Я конечно нигде не косячил, перед поцанами чист, но за случай данный поясню.

    Если у вас нигде не используется php, вы просто залили статичный сайт на хостинг, то смысла в использовании .php файлов я не вижу.

    Вы пишите что вам нужен include (следовательно требуется написать php код), ну добавляйте его и правьте расширение файла на .php. Не плохой это тон. Единственное, что если у вас в поисковике везде стоят /page.html версии, то они будут недоступными, хотя можно повесить редирект с таких страниц на php страницы.

    UPD: я реже вижу сайты на голом html, нежели php и тд.
    Ответ написан
    Комментировать
  • Почему выдает 1 переменную и 6 раз?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    87a9953415eaab4abe599f15946c.png
    Ответ написан
    Комментировать
  • Как написать такую программку на JS?

    @kayart
    var mystring = ""
    var maxlength = 10;
    
    for(i=0;i<maxlength;i++) {
        mystring += "#";
        console.log(mystring);
    }
    Ответ написан
    Комментировать
  • Остановить воспроизведение видео при выходе из полноэкранного режима?

    Exploding
    @Exploding
    wtf?
    $(document).on("onfullscreenchange", function (e) { 
    	if (document.fullscreenElement) {
    		//зашли в ФС
    	  } else {
    		 //вышли из ФС
    	  }
    });
    Ответ написан
    3 комментария
  • Почему ошибка в программе?

    proudmore
    @proudmore
    Ваш код практически не читается.

    Вот вам решение:
    <?php
    
    $usa = [
        ['Los-Angeles', 'Californiy', 3792621],
        ['San-Diego', 'Californiy', 1307402],
        ['San-Xose', 'Californiy', 945942],
        ['Dallas', 'Texas', 1197816],
        ['San-Antonio', 'Texas', 1327407],
        ['Xiqston', 'Texas', 2100263],
        ['Feladelfiy', 'Pensilvaniy', 1526006],
        ['Feniks', 'Arizona', 1445632],
        ['Chicago', 'Ilynois', 2695598]
    ];
    
    $summary = [];
    
    foreach ($usa as $item){
    
        $state = $item[1];
        $peoples = $item[2];
    
        if(array_key_exists($state, $summary)){
            $summary[$state] += $peoples;
        } else {
            $summary[$state] = $peoples;
        }
    }
    
    print_r($summary);
    Ответ написан
    2 комментария
  • Почему Yii2 не предлагает сохранить файл Excel, а сразу кидает его в папку web?

    @BorisKorobkov
    Web developer
    не предлагается сохранить файл (как должно быть)

    С чего бы оно вам что-то должно? Покажите документацию, где вы это вычитали.

    Для вывода xlsx не в файл, а в браузер, надо:
    header('Content-type: application/vnd.ms-excel');
    header('Content-Disposition: attachment; filename="my_file.xlsx"');
    $writer->save('php://output');
    Ответ написан
    3 комментария
  • Много SVG иконок в проекте. Как быть?

    vicodin
    @vicodin
    Имею некоторый опыт
    Используйте svg <use>

    В двух словах - в одном свг вы заносите все свои свг иконки в виде "символов", и даёте каждой свой id, и потом просто через атрибут вставляете иконку через айди

    https://css-tricks.com/svg-symbol-good-choice-icons/ , я так и делал в подобной ситуации.

    вот ещё, но чуть другое:
    taye.me/blog/svg/a-guide-to-svg-use-elements (en)
    https://habrahabr.ru/post/230443/ (ru)
    Ответ написан
    5 комментариев
  • Как реализовать подобное на PHP?

    amr-dallin
    @amr-dallin
    Разработка на CakePHP
    1) Что за "Произвольное содержимое" и где оно формируется? Если на клиенте, то PHP не нужен.
    2) Событие на клик, скрытие/отображение div делается с помощью javascript. Если, все таки, "произвольное содержимое" получаете с сервера, то можно воспользоваться технологией ajax.

    В общем, больше конкретики нужно.
    Ответ написан
    2 комментария
  • Как реализовать подобное на PHP?

    dark_tke
    @dark_tke
    Помогли? Отметь решением!
    Если я правильно понял вашу задачу, то пользователь должен ввести какое то слово, в ответ должна пройти проверка, затем если все верно, должно что-то вывестись в div

    То что вы хотите сделать не делается исключительно на php, это делается через связку php+java script(ajax). Либо можно на чистом php но страница будет каждый раз перезагружаться, что не комильфо.
    Ответ написан
    2 комментария