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

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

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 читать вам все равно придется, по крайней мере, вводную часть. Но зато теперь вы знаете как сразу создать готовое к работе веб-приложение, а не просто заготовку. Если бы у меня такое руководство было сразу — я бы тогда не сидел три дня в сети, а побольше гулял бы. Весна же.

Будьте здоровы!
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 60

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

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

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

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

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

            0
            7.1
            я потом попробую еще сделать swap, как посоветовали ниже, отпишусь)
        0
        Ничего сверх того, что написано в руководстве. Yii2 начинал устанавливаться и где-то по ходу установки вылетал с allocated memory и т.п. memory limit в PHP установлен в -1 (безлимитно). Повоторюсь, локально (Win7 6Gb) все нормально.
          0
          Может лишнего набросал в composer.json.
          Из коробки действительно должно хватать з головой 1Gb оперативки.

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

            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.


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

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

              0
              … и да, насчет swap прогуглю (я не такой уж большой спец в настройке LAMP — совершенствуюсь по мере необходимости)))
              0
              xdebug может композер заставить кушать память, известная тема
            +2
            Вопрос — зачем делать статический сайт на Yii? Почему не взять и нагенерировать его с markdown при помощи какого-нибудь готового инструмента?
              –1
              Именно это я и вырезал из предисловия )))))))) видимо зря )))

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

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


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

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

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

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

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

                  0
                  Поддерживаю. Можно, конечно, но зачем?
                    0
                    Маркдаун пригоден для чего-то сверх справок и readme?
                      +3

                      Вполне

                    +7

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


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


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


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

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

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


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

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


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

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

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

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

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


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

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

                          Вот это оно и есть.
                    +1
                    зачем делать статический сайт, используя фреймворк?
                      –1
                      а как вы предлагаете сделать статический сайт, коли нужно таковой сделать?
                        0
                        Для начала понять термин «Статический сайт», а потом выучить HTML.
                          0
                          Jekyll.
                            0
                            да. почему бы и нет.
                            +1

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

                          0
                          Правильнее будет на SSI собрать, на худой конец через include php. А это зачем? Это даже не мануал, это называется — дайте инвайт на хабр.
                          А так правильно, лучше гулять, чем писать такой мануал.
                          Спасибо.
                            –5
                            Уж поверьте на слово, получить инвайт на Хабр для меня не проблема :D я web изнутри ковыряю с конца 90-х — у меня таких историй — вагон и маленькая тележка ))

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

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

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


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

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

                                0
                                Зачем?
                              0
                              SSI это очень хорошо задуманная, но очень фигово реализованная технология. Практиковал ее когда-то давно. Возможности скудные и очень неудобно все.
                              +1
                              Жду статью как сделать автозагрузку psr-4 через composer
                              Будет примерно так же полезно
                              А если серьезно — то микрофреймворки или генераторы для такой мелочи куда больше подходят, рекомендовать ради одного правила в url тащить довольно жирный фреймворк — плохой подход
                                –5
                                Это индивидуально.

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

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

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

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

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

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

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

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

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

                                    зы. и да, ваша «притензия» — в миру, вовсе не притензия, а претензия.
                                    +1
                                    Причем, мне для этого не понадобится менять движок и все будет сделано в рамках единой концепции.

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

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

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

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

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

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

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

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

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


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

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

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


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

                                  ***

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

                                    мда… статья и через пару лет полезна, хотя и не для целей автора. Карму слили те, кому она была неинтересна… а вам спасибо!

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

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

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

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

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


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

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

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


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

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

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

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

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

                                              Всё просто как мычание. Зачем усложнять-то?
                                                +2
                                                Одно дело когда юзер спрашивает о деталях реализации описанного в сабже — это норм

                                                это норма, когда реализуемая вещь несколько сложнее того о чем можно прочитать в документации. Как выше уже сказали, статья ниже местного уровня. Вот если бы вы добавили админку для этих страниц, связали все это дело с varnish, да добавили обработку esi-блоков, например для форм, то было бы поинтереснее и полезнее.
                                                  0
                                                  Вы оцениваете со своего уровня знания Yii2. А этот текст ориентирован на полного новичка, которому нужно быстро слепить сайт на Yii2. И ему этот текст полезнее чем описанные вами навороты. Просто другая аудитория, только и всего. Что в этом такого непонятного?
                                                    +2
                                                    А этот текст ориентирован на полного новичка, которому нужно быстро слепить сайт на Yii2

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

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

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

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


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


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


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

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


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

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

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

                                                        Если человек не хочет понимать — заставить я его не смогу.
                                                          +3
                                                          есть простое объяснение почему все адекватные люди считают вашу статью унылой. можете прочитать по ссылке. Вкратце — установили фреймворк, а гонора будто скайнет написали
                                                            –3
                                                            А кто вам сказал что вы и ваши камрады — «адекватные люди»?

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

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

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

                                                            У вас какой-то вопрос есть по тексту? Что-то не работает из описанного в статье?
                                                              0
                                                              да, есть вопрос по теме, на который вы так и не ответили — как вы предлагаете редактировать эти страницы без админки?
                                                                –3
                                                                лично я это делаю в Notepad++ через WinSCP

                                                                но уверен, что есть еще 100+ вариантов как это можно сделать
                                        0
                                        Серия «Как забить гвоздь на даче?»

                                        Вариант 1

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

                                        Вариант 2

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

                                        Only users with full accounts can post comments. Log in, please.