Сначала я написал пространное предисловие к этому тексту, а потом удалил его. В общем, этот текст для тех, кто как и я, любит сначала сделать, а потом уже разбираться с тем, что же он такое сделал. Чтобы собрать нижеизложенную информацию мне пришлось три дня усиленно рыться в различных источниках. Так что, надеюсь кому и пригодится. Это годная шпаргалка.

1. Устанавливаете Yii2 Basic на сервер, как написано в документации. Описано там всё четко и по делу, добавить мне нечего.

Разве что вот: локально на OpenServer поставилось без сучка, без задоринки. А вот удаленно, на KVM Ubuntu 16.04 с 1Gb оперативки Composer-у не хватило памяти. Бился часа два, так и не осилил. Благо, что с локального сервера на удаленный, сайт можно легко перенести простым копированием.

2. Повторюсь, установка — basic (допустим, в папку /www/site/basic, но далее мы для простоты изложения будем вести отсчет именно от папки basic в которую вы создали проект, как рекомендуется в руководстве).

Папку basic/web сразу устанавливаете как DocumentRoot — как это сделать, тоже есть в официальном руководстве на русском языке.

3. Открываете basic/controllers/SiteController.php и меняете

public function actions()
{
	return [
		'error' => [
			'class' => 'yii\web\ErrorAction',
		],
		'captcha' => [
			'class' => 'yii\captcha\CaptchaAction',
			'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
		],
	];
}

на

public function actions()
{
	return [
		'error' => [
			'class' => 'yii\web\ErrorAction',
		],
		'captcha' => [
			'class' => 'yii\captcha\CaptchaAction',
			'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
		],
		'page' => [
			'class' => 'yii\web\ViewAction',
		],
	];
}


Это позволит вам не писать отдельный action для каждой статической страницы. Отныне они у вас вас будут подхватываться автоматически из папки basic/views/site/pages.

Создайте в этой папке файл one.php и скопируйте в него содержимое файла basic/views/site/about.php (для понятности).

Теперь содержимое этого файла доступно по адресу:

http://yoursite.com/index.php?r=site%2Fpage&view=one

Соответственно, таких файлов вы можете создать сколько вам нужно.

4. Включаете ЧПУ, как написано здесь.

Настройки производятся в файле basic/config/web.php.

5. Для того, чтобы урл

http://yoursite.com/index.php?r=site%2Fpage&view=one

выглядел как

http://yoursite.com/one

нужно задать такое правило для ЧПУ

'view' => 'site/page',

(Внимание!!! Слово view в вышеприведенном примере следует взять в угловые скобки, не смог написать как есть, ибо хабра-HTML-фильтры не пропускают, зато ниже — все нормально, парадокс… *пожимаю плечами*)

То есть кусок кода, отвечающий за ЧПУ в basic/config/web.php будет выглядеть так:

'urlManager' => [
	'enablePrettyUrl' => true,
	'showScriptName' => false,
	'enableStrictParsing' => false,
	'rules' => [
		'<view>' => 'site/page',
	],
],

6. Теперь метатеги для каждой страницы. Изначально там установлен только title

$this->title = 'Титл для one.php';

А нам, допустим, нужно добавить OG-метатеги (если не в курсе что это — непременно прогуглите — для соцсетей вещь незаменимая). Пишете прямо строчкой ниже что-то вроде:

$this->registerMetaTag([ 'property' => 'og:title', 'content' => 'OG-титл для one.php' ]);

Остальные мета-теги добавляете по аналогии с этим. Если что-то непонятно — есть документация по registerMetaTag()

7. Трик для og:url

Под строчкой

use yii\helpers\Html;

в самом верху страницы, добавляете:

use yii\helpers\Url;

А сам og:url прописываете так:

$this->registerMetaTag([ 'property' => 'og:url', 'content' => Url::to('',true) ]);

Теперь при любых переносах с сервера на сервер ог-урл у вас будет в порядке.

8. То же самое и с внутренними ссылками по сайту. Подключаете хелпер (наверху страницы):

use yii\helpers\Url;

И, например, ссылку на нашу страницу-one размещаете в таком виде:

<?= Url::to(['site/page', 'view' => 'one']); ?>

Она теперь будет отображаться правильно вне зависимости от того, какие именно правила вы установите для ЧПУ.

И да, обратите внимание, что в виджете NavBar лэйаута (basic/views/layouts/main.php) эта же ссылка будет выглядеть примерно так:

['label' => 'Наша страница One', 'url' => ['/site/page', 'view' => 'one']],

Вот вроде и всё. Простой сайт на Yii2 вполне готов к работе (жалко что смайлы запрещают ставить).

Так или иначе, документацию к Yii2 читать вам все равно придется, по крайней мере, вводную часть. Но зато теперь вы знаете как сразу создать готовое к работе веб-приложение, а не просто заготовку. Если бы у меня такое руководство было сразу — я бы тогда не сидел три дня в сети, а побольше гулял бы. Весна же.

Будьте здоровы!
Поделиться с друзьями
-->

Комментарии (59)


  1. barby
    07.03.2017 15:58
    +2

    А вот удаленно, на KVM Ubuntu 16.04 с 1Gb оперативки Composer-у не хватило памяти

    Не могу себе этого представить. Вы явно что-то там делаете не так.


    1. BoShurik
      07.03.2017 16:45

      Похоже, что автор делал composer update вместо composer install


      1. procode
        07.03.2017 17:13

        Нет, я все делал по официальной инструкции.


        1. BoShurik
          07.03.2017 17:24

          А в официальной инструкции есть пункт про деплой? Я что-то не нашел.
          Какая версия php? На седьмой версии использование памяти сильно меньше, должно сработать


          1. procode
            07.03.2017 17:52

            7.1
            я потом попробую еще сделать swap, как посоветовали ниже, отпишусь)


    1. procode
      07.03.2017 17:16

      Ничего сверх того, что написано в руководстве. Yii2 начинал устанавливаться и где-то по ходу установки вылетал с allocated memory и т.п. memory limit в PHP установлен в -1 (безлимитно). Повоторюсь, локально (Win7 6Gb) все нормально.


    1. V0V
      07.03.2017 17:16

      Может лишнего набросал в composer.json.
      Из коробки действительно должно хватать з головой 1Gb оперативки.

      И вместо того «простого копирования» добавили бы swap еще 1Gb и развернули нормально.


      1. procode
        07.03.2017 17:19

        На сайте Композера есть такое:

        Composer may sometimes fail on some commands with this message:
        PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...>
        In this case, the PHP memory_limit should be increased.
        Note: Composer internally increases the memory_limit to 1.5G.


        мб это оно и есть…


        1. Fesor
          08.03.2017 03:24

          не надо просто composer install на серваке делать. Сделать локально билд с дампнутым автолоадером и его уже деплоить.


      1. procode
        07.03.2017 17:21

        … и да, насчет swap прогуглю (я не такой уж большой спец в настройке LAMP — совершенствуюсь по мере необходимости)))


    1. mr_avi
      10.03.2017 17:44

      xdebug может композер заставить кушать память, известная тема


      1. BoShurik
        10.03.2017 17:55
        +2

        С версии 1.3 он вроде как отключает xdebug автоматически
        https://github.com/composer/composer/releases/tag/1.3.0


  1. vaniaPooh
    07.03.2017 16:09
    +2

    Вопрос — зачем делать статический сайт на Yii? Почему не взять и нагенерировать его с markdown при помощи какого-нибудь готового инструмента?


    1. procode
      07.03.2017 17:28
      -1

      Именно это я и вырезал из предисловия )))))))) видимо зря )))

      если двумя словами: мне нужно было пару своих лендингов развернуть в нечто моногостраничное + чтобы была перспектива на расширяемость + хотелось попробовать что-то новое (весна ведь))))

      а так, конечно, поставил WP или D7 и в путь -)


      1. FireWind
        07.03.2017 17:34
        -2

        Спасибо большое, как раз такая штука и нужна для одностраничников/лендингов. Собирался городить свой огород на подключаемых файлах .php, но сейчас воспользуюсь вашим решением. Кстати, зачем установку делать с composer, не проще развернуть архив и избежать проблем с памятью (хостинги разные бывают)?


        1. procode
          07.03.2017 17:56
          -2

          Спасибо большое, как раз такая штука и нужна для одностраничников/лендингов. Собирался городить свой огород на подключаемых файлах .php, но сейчас воспользуюсь вашим решением.


          «Спасибом» — не отделаетесь! :D Объясните товарищам в каментах ниже и выше — зачем я «этот огород городил» )))

          Шучу конечно! :) Кому надо — поймет, а остальные нам не интересны, правда же? )

          Да, можно было и архивом, но мне захотелось попробовать и через Composer :)

          К тому же, в конечном итоге, все равно пришлось лить на удаленный хост в виде архива.


        1. Fesor
          08.03.2017 03:38

          Собирался городить свой огород на подключаемых файлах .php

          https://habrahabr.ru/post/323416/#comment_10108286


    1. alexchromets
      07.03.2017 18:09

      Поддерживаю. Можно, конечно, но зачем?


    1. dom1n1k
      08.03.2017 14:37

      Маркдаун пригоден для чего-то сверх справок и readme?


      1. ellrion
        08.03.2017 15:06
        +3

        Вполне


  1. ellrion
    07.03.2017 17:22
    +7

    Объясните смысл этой статьи? Она решает какую то конкретную проблему? Она что то раскрывает более глубоко?


    Люди для которых нужны вот такие cтроки:


    Под строчкой
    use yii\helpers\Html;


    в самом верху страницы, добавляете:
    use yii\helpers\Url;

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


    1. procode
      07.03.2017 17:36
      -2

      Она решает какую то конкретную проблему?


      Давайте еще раз прочитаем что написано в заголовке статьи:

      Yii2, быстрый старт. Самый простой сайт на Yii2 со статическими страницами без использования БД


      Какое именно слово непонятно в этих двух предложениях?


      1. ellrion
        07.03.2017 17:42
        +3

        Т.е. вы считаете что это реальное решение реального юзкейса?
        Или этот быстрый старт для кого? Для codemonkey? На хабре?


        1. procode
          07.03.2017 18:04

          Прошу ознакомиться: https://habrahabr.ru/post/323416/#comment_10107528

          А вообще, я рассуждал просто:

          — Коли такой креатив был нужен неделю назад мне — значит есть и еще такие же


          Как видите, я не ошибся.

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

          Вот это оно и есть.


          1. BoShurik
            07.03.2017 19:44
            +1

            Вот ради любопытства попробовал тоже самое сделать на Symfony. И мне что-то кажется, что там проще :)
            https://github.com/BoShurik/symfony-simple/commit/43067c7d78618aa8a85af2214b1bad272354d2d4


            1. procode
              07.03.2017 20:35

              У меня кармы не хватает — так бы поставил жирный плюс! ))

              Спасибо.


  1. versh23
    07.03.2017 17:28
    +1

    зачем делать статический сайт, используя фреймворк?


    1. procode
      07.03.2017 17:29
      -1

      а как вы предлагаете сделать статический сайт, коли нужно таковой сделать?


      1. kaboose
        07.03.2017 18:29

        Для начала понять термин «Статический сайт», а потом выучить HTML.


      1. Miraage
        07.03.2017 18:42

        Jekyll.


        1. procode
          07.03.2017 19:39

          да. почему бы и нет.


      1. Fesor
        08.03.2017 03:31
        +1

        https://www.staticgen.com/ — выбирайте.


  1. kaboose
    07.03.2017 17:29

    Правильнее будет на SSI собрать, на худой конец через include php. А это зачем? Это даже не мануал, это называется — дайте инвайт на хабр.
    А так правильно, лучше гулять, чем писать такой мануал.
    Спасибо.


    1. procode
      07.03.2017 17:34
      -5

      Уж поверьте на слово, получить инвайт на Хабр для меня не проблема :D я web изнутри ковыряю с конца 90-х — у меня таких историй — вагон и маленькая тележка ))

      И да, имеется и самописный MVC для как раз для таких вот целей, но чисто прикололо сделать сайт на новом для меня Yii2 — вообще не вижу проблемы.

      //вы реально считаете, что сейчас кто-то еще использует SSI? :)


      1. Fesor
        08.03.2017 03:30
        +2

        Уж поверьте на слово,

        Неслово верить вредно.


        И да, имеется и самописный MVC

        Это когда у нас HTML вынесен в шаблоны а SQL размазан по чем-то что вы называете "модель"? Ну да, я тоже таким занимался когда php осваивал и мне кто-то сказал что mvc это круто и модно. Но вы ж там с конца 90-х. Могли бы уже похвастаться чем-то интереснее типа "у меня свой request/response фреймворк", или "у меня свой генератор статических вэбсайтов".


        1. procode
          08.03.2017 09:54

          Зачем?


    1. dom1n1k
      08.03.2017 14:41

      SSI это очень хорошо задуманная, но очень фигово реализованная технология. Практиковал ее когда-то давно. Возможности скудные и очень неудобно все.


  1. MetaDone
    07.03.2017 18:12
    +1

    Жду статью как сделать автозагрузку psr-4 через composer
    Будет примерно так же полезно
    А если серьезно — то микрофреймворки или генераторы для такой мелочи куда больше подходят, рекомендовать ради одного правила в url тащить довольно жирный фреймворк — плохой подход


    1. procode
      07.03.2017 19:44
      -5

      Это индивидуально.

      Вот моя мотивация:

      — Я могу сейчас к этим статическим страницам легко прикрутить контактную форму из Yii2. Например. Или колонку новостей.

      Причем, мне для этого не понадобится менять движок и все будет сделано в рамках единой концепции.


      1. ellrion
        07.03.2017 20:37
        +3

        Да пожалуйста. Но вы похоже так и не уловили сути притензии. Статья 'я поставил фреймворк' не уровень хабра.


        1. procode
          07.03.2017 21:16
          -5

          А почему вы считаете, что можете выдвигать мне какие-то претензии?

          Вы мне за написание этой статьи денег вроде не перечисляли.

          Кому она нужна — те ей воспользуются.

          Вам она, я вижу, не нужна.

          Ну ок, не вопрос — я тоже не всё подряд читаю.

          зы. и да, ваша «притензия» — в миру, вовсе не притензия, а претензия.


      1. Fesor
        08.03.2017 03:27
        +1

        Причем, мне для этого не понадобится менять движок и все будет сделано в рамках единой концепции.

        концепция заключается в "прочитал документацию за пол часика и можно в прод"? Суть в том что ваша публикация не несет полезной нагрузки.


  1. procode
    08.03.2017 10:21
    -2

    Суммарно треду:

    1. Откровенно удивило количество неадекватов на Хабре. Вроде бы древний IT-ресурс с репутацией, а вот поди ж ты…

    Суть претензии в том, что есть золотое правило:

    — Можешь сделать лучше — сделай. Не можешь — отойди и не мешай делать другим.

    И когда я вижу как это правило грубо нарушается — меня это откровенно расстраивает. Ну да, я ведь живой человек.

    2. Жалею что поддержал «светскую беседу» с этими людьми. Ну, это просто по неопытности (2 день на Хабре). Впредь буду осмотрительней.

    3. Лучший комментарий треда:

    Спасибо большое, как раз такая штука и нужна для одностраничников/лендингов. Собирался городить свой огород на подключаемых файлах .php, но сейчас воспользуюсь вашим решением.


    Именно для таких случаев и был написан креатив. Для прагматиков, которым требуется решать реальные практические задачи. Будущее за такими людьми, а не интеллектуальными снобами.

    Вот еще хороший камент, кстати:

    Вот ради любопытства попробовал тоже самое сделать на Symfony. И мне что-то кажется, что там проще :)
    https://github.com/BoShurik/symfony-simple/commit/43067c7d78618aa8a85af2214b1bad272354d2d4


    Это как раз тот случай когда человек попытался сделать лучше. Уважаю такой подход.

    ***

    В общем, это я позлился что мне карму заминусили.


  1. sspat
    08.03.2017 12:06
    +1

    Самый явный признак того, что вы подошли к задаче с неверного направления — это то, что вы потратили на ее решене три дня. И поверьте мне, те, кто не сможет выполнить те действия которые вы описали самостоятельно, точно так же на три дня застрянет как только нужно будет внести любое изменение — вы же нигде не обьяснили, почему нужно делать именно так? За что отвечают настройки в конфиге? Вы предлагаете просто перепечатать с экрана какой-то код, а при любом вопросе идти читать документацию.


    1. procode
      08.03.2017 13:38
      -2

      1. Документация к Yii2 весьма добротно написана, смысл переиначивать то, что и так хорошо.

      2. В тексте сделан акцент на вещах, которые не очевидны человеку, начинающему знакомиться с Yii2.

      3. Да, доки по методам Yii2 человеку всё равно придется читать — а как иначе-то? Но теперь он знает какие именно методы каких классов ему нужно понять для решения описанной в заголовке задачи.

      4. Повторюсь: мне очень странно что приходится объяснять в комментариях очевидные вещи. Мне казалось что пользователи Хабра должны быть более сообразительны. Ну, как бы, ноблесс облиге :)


      1. Fesor
        09.03.2017 01:59
        +1

        не очевидны человеку, начинающему знакомиться с Yii2.

        типа "что такое неймспейсы"? Причем вы даже не объяснили зачем нужно вставлять use. Просто "поверьте наслово", делайте мол так.


        мне очень странно что приходится объяснять в комментариях очевидные вещи.

        типа "зачем вы сделали очередной велосипед" или "какую практическую пользу и на какую аудиторию ориентирован материал"? Это вполне себе очевидные вопросы, но ответов вы недали и "многим" все еще непонятно зачем людям которые и php толком не знают вообще брать yii2 для решения задачи вывода статических страничек. Лучше научить их пользоваться генератором.


        1. procode
          09.03.2017 18:59
          -3

          но ответов вы недали и «многим» все еще непонятно зачем людям которые и php толком не знают вообще брать yii2 для решения задачи вывода статических страничек


          Ну а я здесь причем? Мне-то всё понятно. Почему я должен разжевывать это понимание праздноинтересующимся?

          Я вообще пожалел уже, что начал отвечать на эти тупые вопросы в каментах — всю карму мне заминусили :D

          Я реально не ожидал, что здесь столько троллей. Вроде не Лурк и не Удаффком…

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


          1. MetaDone
            09.03.2017 19:43
            +2

            Ну а я здесь причем? Мне-то всё понятно.

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


            1. procode
              10.03.2017 08:55
              -1

              Ненене. Одно дело когда юзер спрашивает о деталях реализации описанного в сабже — это норм. Конечно я с удовольствием поделюсь опытом. И совсем другое дело когда какие-то мутные личности начинают раскачивать за тему того, что «это им не нужно». Ну не нужно так не нужно — просто пройди мимо и всё. Мне тут например на Хабре 99% постов не нужны. Ну так я их и не читаю и не коменчу. Логично же?

              Всё просто как мычание. Зачем усложнять-то?


              1. MetaDone
                10.03.2017 09:16
                +2

                Одно дело когда юзер спрашивает о деталях реализации описанного в сабже — это норм

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


                1. procode
                  10.03.2017 10:17

                  Вы оцениваете со своего уровня знания Yii2. А этот текст ориентирован на полного новичка, которому нужно быстро слепить сайт на Yii2. И ему этот текст полезнее чем описанные вами навороты. Просто другая аудитория, только и всего. Что в этом такого непонятного?


                  1. MetaDone
                    10.03.2017 10:27
                    +2

                    А этот текст ориентирован на полного новичка, которому нужно быстро слепить сайт на Yii2

                    И ему этот текст полезнее чем описанные вами навороты

                    и как вы предлагаете эти самые страницы редактировать?
                    В статье написано
                    Отныне они у вас вас будут подхватываться автоматически из папки basic/views/site/pages

                    круто, все равно придется верстать и складывать их в папку. Зачем тут фреймворк, если можно эти же сверстанные страницы положить в папку? Без «наворотов» это совсем бесполезно, даже вредно.


                  1. Fesor
                    10.03.2017 11:02
                    +2

                    Что в этом такого непонятного?

                    Вы предлагаете брать yii2 для того что бы использовать его как шаблонизатор… в то время когда можно просто взять twig (или любой другой шаблонизатор, просто twig гибче с точки зрения реюза шаблонов), composer и plain php и получить абсолютно тот же результат но намного больше возможностей. И опыта получить можно будет больше при объеме статьи не более вашей.


                    Новичкам не стоит читать статьи в духе "скопируйте эту строчку", ибо так они ничему не научатся. А готовых решений и так достаточно и ставить их удобнее чем копировать из статьи на хабре.


                    Потому и вызывает непонимание зачем вы вообще писали эту статью. Новичкам пользы нет, ибо мы говорим об уровне знаний "я вчера услышал про PHP". Им лучше 3 дня почитать документацию и разобраться (причем документацию по PHP для начала). Потому мое личное мнение — ваша статья наносит больше вреда чем пользы с точки зрения обучения людей.


                    Ну а если разработчик не может сделать то что вы описали за день хотя бы, то подпускать таких к коммерческим проектам не стоит, а значит 3 дня на поразбираться у них есть.


                    1. procode
                      10.03.2017 23:50

                      Потому и вызывает непонимание зачем вы вообще писали эту статью.


                      Тут я бессилен.

                      Можно привести осла к водопою, но невозможно заставить его пить воду.

                      С пониманием то же самое.

                      Если человек не хочет понимать — заставить я его не смогу.


                      1. MetaDone
                        11.03.2017 01:21
                        +3

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


                        1. procode
                          11.03.2017 10:57
                          -3

                          А кто вам сказал что вы и ваши камрады — «адекватные люди»?

                          Я пока что увидел в каментах всего несколько адекватов, и это я не про вас.

                          У меня встречный вопрос: вы своими комментариями чего здесь добиться пытаетесь? Цель какова?

                          То есть вы пишете какой-то галимый офтоп к вполне себе предметной статье на конкретную тему.

                          У вас какой-то вопрос есть по тексту? Что-то не работает из описанного в статье?


                          1. MetaDone
                            11.03.2017 11:02

                            да, есть вопрос по теме, на который вы так и не ответили — как вы предлагаете редактировать эти страницы без админки?


                            1. procode
                              11.03.2017 21:40
                              -3

                              лично я это делаю в Notepad++ через WinSCP

                              но уверен, что есть еще 100+ вариантов как это можно сделать


  1. kaboose
    10.03.2017 23:36

    Серия «Как забить гвоздь на даче?»

    Вариант 1

    1) Найти строительную организацию с допуском СРО.
    2) Предоставить проект с утверждением главного архитектора города.
    3) Составить детальную смету по работам и материалам.
    4) Получить удовлетворение от проделанных работ.

    Вариант 2

    1) Взять молоток, забить гвоздь.
    2) Получить удовлетворение от проделанных работ.