• Какой желателен функционал бэкенда для сайта под "ключ"?

    У каждого индивидуально.
    Лучше делать, что бы можно было расширить без проблем. Тогда другой разработчик помянет добрым словом.

    Если вы хотите захардкодить все, то конечно можно. И потом при каждом желании сдирать деньги за каждую фигню. Но если клиент просечет, к вам больше не обратятся и сарафанное радио работать не будет.
    Ответ написан
    Комментировать
  • Что не так с ArrayHelper::index YII2?

    Все работает. Ток что проверил в контроллере
    public function actionToggle()
        {
            $a = [
                ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
                ['id' => '345', 'data' => 'def', 'device' => 'tablet'],
                ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
            ];
    
            $b = ArrayHelper::index($a, 'id');
    
            return $this->render('toggle', [
                'b' => $b,
            ]);
        }


    в View toggle
    <?php
    /* @var $this yii\web\View */
    
    $this->title = 'Ars';
    ?>
    
    <h1>Привет</h1>
    
    <?php
    echo "<pre>";
    var_dump($b);
    ?>


    массив такого формата стал
    array(2) {
      [123]=>  array(3) {
        ["id"]=>    string(3) "123"
        ["data"]=>    string(3) "abc"
        ["device"]=>    string(6) "laptop"
      }
      [345]=>
      array(3) {
        ["id"]=>    string(3) "345"
        ["data"]=>    string(3) "hgi"
        ["device"]=>    string(10) "smartphone"
      }
    }
    Ответ написан
    2 комментария
  • Как настроить xdebug и phpstrom 10 на ubuntu 14?

    А если в Id написать так ?
    xdebug.idekey=PHPStorm
    Если вы используете прослушку порта, ключ вообще не влияет.
    Ответ написан
  • Можно ли изменять CSS в Laravel для внедрения адаптивных картинок?

    Да, конечно. Можно подсмотреть адаптивность картинлк в Bootstrap 3 и выдернуть то что вам нужно. Это же никак не привязано к PHP Фреймворку.
    Ответ написан
    Комментировать
  • Стоит ли писать свои велосипеды новичку?

    Говорю вам как Junior прошедший через это не так давно. Однозначно стоит поработать с фреймворком. Но в итоге вы упретесь в знаниях только по фреймворку и не сможете мыслить в рамках PHP. Иначе говоря, достаточно трудно делать что-то продуктивно на фреймворке, если вы не знаете как это реализовать на чистом Php.

    В конечном итоге будут ситуации, когда нужно решить какую-то сложную задачу, где требуется именно возможности самого Php, а фреймворк своих решений не предоставляет.

    Итог:
    Велосипед на фреймворке
    - даст вариативность решения сложных задач простым путем, однако сложные решения нужно будет думать самому. А начинающему разработчику, самому и сразу найти верное решение без подсказок, трудно(!=невозможно).

    Велосипед на чистом PHP - даст знания самого языка, если вы примените паттерн MVC - вы сможете расширить свой велосипед и разобраться в нем через год. Если вы самостоятельно прикрутите ORM, Doctrine например, вы поймете как это упрощает в разработке время. Если вы добавите паттерны Service Locator, dependency injection - поймете на сколько гибче ваши классы станут.
    Естественно, что после такого стека технологий разработанных вручную. Фреймворк вам не будет казаться такой магией, а сложные фреймворки по типу Zend-a не будут такими сложными.
    Ответ написан
    Комментировать
  • Как найти различия в строках php?

    Использовать жесткое равно а сами татйлы брать из бд и сравнивать.
    titlex = "Пацанский сайт немного магии, для пацанов онли!";
    titley = "Пацанский сайт Мерлину такое не снилось, для пацанов онли!";
    if(titlex === titley)
    {
    //your code если они различные
    }


    Если вам нужно искать непосредственно сами тайтлы и в фразе вытащить только то, что стоит между, использовать RegEx для поиска. Просто нужно создать шаблон, по которому регулярное выражение вытащит все, что будет между ключевыми фразами.

    И третий способ, написать JS скрипт, который работает непосредственно со страницами и html. вытащить тайтлы, а дальше все тоже самое либо сравнение, либо RegEx на JS
    Ответ написан
  • PHP, Yii2 и PostgreSQL. Как сделать поддержку временных зон для юзеров?

    Не знаю как в чистом PHP это сделать, но в Yii 2 достаточно сделать так.
    config/main.php
    'components' => [
        'formatter' => [
           'dateFormat' => 'd.MM.Y',
           'timeFormat' => 'H:mm:ss',
           'datetimeFormat' => 'd.MM.Y H:mm',
       ],
    ],


    Вывод времени и даты
    /* Тут идет установка часового пояса
    * естественно вы можете хранить их в кэше или БД 
    * или вычислять по IP или JS. Тайм зоны можно хранить 
    * в разных форматах. Лучше в UTC, а еще лучше в
    * UNIX timestamp. 1412599260 / 2014-10-06 12:41:00
    */
    
    $myTimeZone = "Europe/Berlin"; 
    
    Yii::$app->timeZone = $myTimeZone;
    Yii::$app->getFormatter()->asDate(time()); // время 
    Yii::$app->getFormatter()->asDatetime(time()); // Дата и время


    Если не изменяет память, то можно так с тайм зоной работать. Естественно можно сделать виджет и постить где вам нужно.

    Список тайм доступных тайм зон в PHP

    UPD: По поводу летнего времени. Можно в форме профиля прикрутить чекбокс "учитывать летнее время", а потом сделать в БД триггер, который в определенную дату менял бы таймштампы +1 и -1 час.
    Ответ написан
    Комментировать
  • Laravel выгрузка 25 000 записей в бд, БД зависает???

    Надо обернуть все запросы в транзакцию, либо сформировать один большой запрос. Вместо 25 000 которые у вас сейчас проводят вставку.
    Ответ написан
    Комментировать
  • Как передать значения из массива в отрисованную таблицу?

    вроде бы так
    <table border="1">
    <tr>
        <th>Имя</th>
        <th>Фамилия</th>
       </tr>
    <?php 
    foreach($users as $user) {
      echo '<tr>';
        echo '<td>' . $user->firstname . '</td>';
        echo '<td>' . $user->lastName . '</td>';
     echo '/<tr>';
    ?>

    Ответ написан
  • Как отключить авторизацию для определенных экшенов (Yii2, rest api)?

    В вашем контроллере, где нужно сделать экшен общедоступным.
    public function behaviors()
        {
            return [
                'access' => [
                    'class' => AccessControl::className(),
                    'only' => ['someActionOne', 'someActionTwo',],
                    'rules' => [
                        [
                            'allow' => true,
                            'actions' => ['someActionOne', 'someActionTwo'],
                            'roles' => ['?'],
                        ],
                    ],
                ],
            ];
        }


    Знак вопроса в rules, указывает на то, что доступ к экшену имеет любой не авторизированный пользователь. Символ @ - указывает на то, что доступно будет только авторизированным. Если у вас в поведение нету ACF, то они будут доступны сами по себе. Все выше сказанное актуально, если у вас не реализована система ролей RBAC, в противном случае, вместо символов придется указывать роль.

    ACF - это фильтр, он работает как с простым приложением так и с REST api. Если я не ошибаюсь )
    Ответ написан
  • Насколько важно сейчас начинающему веб-разработчику разбираться в SQL досконально?

    А что там учить то ? О_О если вы знаете английский, там всего 4 часто используемых команды. CRUD, которые выучиваются за пару часов или даже в процессе написания. Тригера начинающий вебер не будет писать, а через ORM вы делаете все те же операции CRUDа. Чистый SQL вам не придется писать - это не безопасно, а во вторых не доверят. Но знать команды и какие возможности у вас есть - это обязательно!

    Иначе будет ситуация, как с коллегой, который начал с фреймворка PHP и когда ситуация потребовала чистых знаний в PHP не смог. Вам этот кипишь нужен?
    Ответ написан
    3 комментария
  • Как сохранить данные в Yii c формы?

    Порядок действий такой должен быть в форме делаете функцию. Можете присвоить значения свои ручками, но закидывать админа и тест луче через миграции.
    public function signup()
        {
            if ($this->validate()) {
                $user = new User();
                $user->username = $this->username; 
                $user->email = $this->email;
                $user->setPassword($this->password);
                $user->generateAuthKey();
    
                if ($user->save()) {
                       // тут можно закинуть отправку токена на мыло
                }
                return $user; // это отправка будет на ваш экшн
            }
            return null;
        }


    в контроллере
    public function actionSignup()
        {
            $model = new SignupForm(); // создается форма что выше
            if ($model->load(Yii::$app->request->post())) { // грузит модель из суперглобалки ПОСТ
                if ($user = $model->signup()) { // создается юзер используется функция из формы
                    Yii::$app->getSession()->setFlash('success', 'Регистрация успешна'); // всплывающее сообщение 
                    return $this->goHome(); //возврат на домашку
                }
            }
    
            return $this->render('signup', [
                'model' => $model,
            ]);
        }


    А функция model->save(); Зажмите в вашем IDE контрл и кликните по функции сэйв, посмотрите как он устроен. Это обыкновенная вставка INSERT.

    В Юзерах вы создаете массив данных, а не объект. Как минимум в юзере нужно функцию, которая этот массив передавала бы вам. и в контроллере вы бы использовали что-то вроде
    $model = New User();
    $model->username = $arrayUser['100']['username']
    $model->email = $arrayUser['100']['email']
    $model->setPassword($arrayUser['100']['password']);
    $model->save();
    Ответ написан
  • Почему возникает ошибка при использовании urlManager?

    Это в .htacces
    Options +FollowSymLinks
    IndexIgnore */*
    
    RewriteEngine on
    
    # if a directory or a file exists, use it directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
    # otherwise forward it to index.php
    RewriteRule . index.php


    Это в frontend/config/main.php у вас все норм подключено, просто может правила в формате RegExp Не верно указаны или что у вас в правилах есть?
    'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                    '/' => 'site/index'
                 /* другие правила */
                ],
            ],
    Ответ написан
  • Почему в некоторых гайдах по js авторы сознательно не ставят точку с запятой?

    Вероятно демонстрируют преймущество языка. Поскольку на этапе компиляции он сам подставляет точку с запятой где нужно. Хотя и сам не понимаю почему до сих пор не пишут в strict mode) Как говорится лучше перебдеть, чем недобдеть.
    Ответ написан
    2 комментария
  • Почему нет таблиц, хотя они есть (mysql)?

    Сделайте в консоли
    show full tables

    Вообще такая проблема была. Пользователю базы выдали права на подключение, но забыли дать права на sql-команды. Тогда и выходит такая штуковина, может быть оно?

    Если пишете на php посмотрите внутри движка. Мб там есть миграции и можно их накатить что бы структуру вернуть.
    Ответ написан
  • Почему так сохраняется в базе?

    Я так понимаю, что у вас один класс используется т.е. только Продукт?
    Если да, то массовая работа и обновления проводятся так.

    В контроллере:
    public function actionUpdate()
        {
            // Тут получаете свой cat либо передаете каким либо образом. 
            $products = Product::find()->where('category_id'= $cat->id)->indexBy('id')->all();
    
            if (Model::loadMultiple($products, Yii::$app->request->post()) && Model::validateMultiple($products)) {
                foreach ($products as $product) {
                    $product->save(false);
                }
                return $this->redirect('index');
            }
            return $this->render('update', ['products' => $products]);
        }


    В виде
    $form = ActiveForm::begin();
    
    foreach ($products as $index => $product) {
        echo $form->field($product, "[$index]value")->checkbox(['value' => $prod->title, 'label' => $prod->title]);
    }
    
    ActiveForm::end();


    Если вы используете не одну модель и связанные вещи т.е. к пример как User и Profile, то вам нужна Работа с несколькими моделями

    К тому же, если вы работаете со свзями, можно использовать жадную загрузку. подгружая и связи таким образом
    //получаете продукты и связи за один запрос.
    $products = Product::find()->with('category', 'someTied')->all();
    
    //или с условием
    $products = Product::find()->with([
        'categpry' => function ($query) {
            $query->andWhere(['category_id' => 15]);
        },
    ])->all();


    Если вам нужно сохранить или обновить именно связные Id у разных объектов, есть метод link.
    Ответ написан
  • Как добавить условие при связях?

    Смотрите, вы можете пойти двумя путями. Сделать условие выборки единичным, там где вам это нужно.
    function ($someCountry = 'Ukraine')
    {
    $product = Product::findOne(123);
    //Запрос ниже выполняться может сколько угодно раз в отличии от $price = $product ->Price();
    $price = $product ->getPrice()
        ->where(['country =:someCountry', [':someCountry' => $someCountry])
        ->orderBy('id')
        ->all();
    }


    Либо изначально сделать связь с определенным условием.
    class Product extends ActiveRecord
    {
        public function getBigPrices($someCountry)
        {
            return $this->hasMany(Price::className(), ['product_id' => 'id'])
                ->where('country > :someCountry', [':someCountry' => $someCountry])
                ->orderBy('id');
        }
    }


    Только в первом варианте, думаю есть более простой Where что то вроде
    $query->where(['country' => USA]);
    Ответ написан
    2 комментария
  • Кто может стать наставником(PHP)?

    А что было на втором этапе собеседования, если не секрет?

    Могу вам по своему опыту сказать, что учите дальше, вы все верно делаете. На фреймворке напишите блог, потом интернет магазин, используйте Ajax, календари, виджеты, делайте то, что вам не хочется, корзины, профили, юзеры, вам это пригодится так или иначе. Вы может и не будете сразу изящно решать задачки, но по крайней мере, будете понимать суть происходящего в каждом модуле. Пару проектов именно как разработчик модулей и все уже будет в порядке.

    Благо гайдов на тему Yii, Symfony. Laravel по написанию блогов, и инет магазинов полно. После фреймворков рекомендую найти курс по написанию на чистом Php. Фреймворк конечно упрощает разработку, но это не должна быть панацея. Фреймворк полезен если вы хорошо знаете ЯП, если это не так. Он жутко связывает и вы не знаете как решать простые задачи и возможности самого языка. Поскольку как только попадается не стандартная задача, которую не нагуглить в интернете, человек сразу теряется.
    Ответ написан
    3 комментария
  • Как просто сменить дизайн на yii2?

    не обязательно использовать бутстрап. Просто вам придется под все виджеты и view, которые используются с помощью бутстрапа переписать на чистый css, js если есть.

    Либо поищите готовые адаптивные шаблоны под Bootstrap, но настраивать и подгонять вам все равно рано или поздно нужно будет.

    Ну и как фреймворк интерпретирует шаблоны и виды знать нужно. И если вы думаете, что это работа фронтенда то ошибаетесь. Они рисуют и верстают шаблон, а внедрять и корректировать будете всегда вы. Я был бы рад если фронтендеры знали фреймворки хотя бы пятерку популярных.
    Ответ написан
    Комментировать
  • Стоит ли переходить с Angular 1.x на React?

    А это принципиально разные вещи. Ангуляр это MVC Фреймворк, а React это библиотека отрисовки. Если вам нужно отрисовка сервера, то реакт используется во всю, Ангуляр 2 пока сырой. Но производительнее был ангулярчик, а дальше посмотрим как ES6 войдет.
    Ответ написан