Спасибо. Но мне бы для начала не полное руководство, а: 1. Что такое, с чем едят, архитектура в общих чертах без деталей, как и где искать что не знаю но надо. 2. Быстренько научиться на нем что-то простенькое делать. Завтра начинаю, в пятницу заканчиваю. Может быть задание какое-нибудь дешевенькое подкинут, тогда будет на чем попрактиковаться, но с заданием пока вилами на воде писано.
mirosas, так romach как раз вам на это ссылку и дал. Там первые две главы - как установить скелет и заставить его работать. Архитектура - стандартный MVC, фреймворк достаточно удобен тем, что реализовано много типовых задач уже реализовано. К нему много сторонних расширений на все случаи жизни к тому же. https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/s ... llation.md https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-workflow.md https://github.com/yiisoft/yii2/blob/master/docs/guide-ru/start-hello.md вот вам что-нибудь простенькое. Но, чтоб его использовать, надо очень хорошо понимать пространства имён, классы и т.п.
Чтоб новую тему не создавать, тут спрошу. Поставил Yii, выдает 500 internal server error, почему может быть такое? запрос Host: yii.gorgazik.ru User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Referer: http://yii.gorgazik.ru/basic/requirements.php Cookie: SESS9fd1c989665c9f765ecdbbff5836a441=96nfiYqZprcu6S8kdAFRrf0oMs04KTNUPu5S54U0TEU Connection: keep-alive ответ Connection: close Content-Language: ru Content-Type: text/html; charset=UTF-8 Date: Sun, 16 Aug 2015 18:11:29 GMT Server: Apache/2.4.10 (Ubuntu) Transfer-Encoding: chunked
php-fpm log [16-Aug-2015 21:30:02] NOTICE: Reloading in progress ... [16-Aug-2015 21:30:02] NOTICE: reloading: execvp("/usr/sbin/php5-fpm", {"/usr/sbin/php5-fpm", "--nodaemonize", "--fpm-config", "/etc/php5/fpm/php-fpm.conf"}) [16-Aug-2015 21:30:02] NOTICE: using inherited socket fd=8, "/var/run/php5-fpm.sock" [16-Aug-2015 21:30:02] NOTICE: using inherited socket fd=8, "/var/run/php5-fpm.sock" [16-Aug-2015 21:30:02] NOTICE: using inherited socket fd=9, "/var/lib/php5-fpm/web2.sock" [16-Aug-2015 21:30:02] NOTICE: using inherited socket fd=9, "/var/lib/php5-fpm/web2.sock" [16-Aug-2015 21:30:02] NOTICE: fpm is running, pid 926 [16-Aug-2015 21:30:02] NOTICE: ready to handle connections [16-Aug-2015 21:30:02] NOTICE: systemd monitor interval set to 10000ms apache log [Sun Aug 16 21:30:02.796964 2015] [mpm_prefork] [pid 4168] AH00169: caught SIGTERM, shutting down [Sun Aug 16 21:30:03.907796 2015] [ssl] [pid 4382] AH01906: alex.host.com:8080:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Sun Aug 16 21:30:03.907943 2015] [ssl] [pid 4382] AH01909: alex.host.com:8080:0 server certificate does NOT include an ID which matches the server name [Sun Aug 16 21:30:03.908171 2015] [suexec] [pid 4382] AH01232: suEXEC mechanism enabled (wrapper: /usr/lib/apache2/suexec) [Sun Aug 16 21:30:03.948713 2015] [auth_digest] [pid 4384] AH01757: generating secret for digest authentication ... [Sun Aug 16 21:30:03.958078 2015] [:notice] [pid 4388] FastCGI: process manager initialized (pid 4388) [Sun Aug 16 21:30:04.024531 2015] [:error] [pid 4384] python_init: Python version mismatch, expected '2.7.6', found '2.7.9'. [Sun Aug 16 21:30:04.024672 2015] [:error] [pid 4384] python_init: Python executable found '/usr/bin/python'. [Sun Aug 16 21:30:04.024680 2015] [:error] [pid 4384] python_init: Python path being used '/usr/lib/python2.7/:/usr/lib/python2.7/plat-x86_64-linux-gnu:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload' [Sun Aug 16 21:30:04.024710 2015] [:notice] [pid 4384] mod_python: Creating 8 session mutexes based on 150 max processes and 0 max threads. [Sun Aug 16 21:30:04.024717 2015] [:notice] [pid 4384] mod_python: using mutex_directory /tmp [Sun Aug 16 21:30:04.043280 2015] [ssl] [pid 4384] AH01906: alex.host.com:8080:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?) [Sun Aug 16 21:30:04.043332 2015] [ssl] [pid 4384] AH01909: alex.host.com:8080:0 server certificate does NOT include an ID which matches the server name [Sun Aug 16 21:30:04.058010 2015] [mpm_prefork] [pid 4384] AH00163: Apache/2.4.10 (Ubuntu) mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_fcgid/2.3.9 mod_python/3.3.1 Python/2.7.9 OpenSSL/1.0.1f configured -- resuming normal operati [Sun Aug 16 21:30:04.058083 2015] [core] [pid 4384] AH00094: Command line: '/usr/sbin/apache2' лога yii нет, если конечно он в папке runtime должен быть
error_log, так будет точнее, посмотри его. Если что, ещё в php.ini можно указать файл для него и он при ошибке появиться в той же папке где и файл php был выполнен. php.ini log_errors = On error_log = php_errors.log
в общем вот ошибка: Aug 16 22:08:14 alex php-cgi: PHP Warning: require_once(/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php): failed to open stream: No such file or directory in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:14 alex php-cgi: PHP Fatal error: require_once(): Failed opening required '/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:15 alex php-cgi: PHP Warning: require_once(/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php): failed to open stream: No such file or directory in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:15 alex php-cgi: PHP Fatal error: require_once(): Failed opening required '/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:16 alex php-cgi: PHP Warning: require_once(/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php): failed to open stream: No such file or directory in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:16 alex php-cgi: PHP Fatal error: require_once(): Failed opening required '/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:17 alex php-cgi: PHP Warning: require_once(/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php): failed to open stream: No such file or directory in /var/www/clients/client1/web2/web/basic/requirements.php on line 23 Aug 16 22:08:17 alex php-cgi: PHP Fatal error: require_once(): Failed opening required '/var/www/clients/client1/web2/web/basic/vendor/yiisoft/yii2/requirements/YiiRequirementChecker.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/clients/client1/web2/web/basic/requirements.php on line 23
вот же хрень, поменял require_once($frameworkPath . '/requirements/YiiRequirementChecker.php'); на require_once($frameworkPath . '/requirements/yiirequirementchecker.php'); заработало Добавлено спустя 4 минуты 28 секунд: может в php.ini есть какая нибудь настройка чтоб он не различал заглавные и строчные буквы? Добавлено спустя 1 минуту 11 секунд: потому что requirements.php заработало а web/index.php нет, тоже чего то не находит наверно
это в linux есть различие между нижним и верхним регистром букв, а как так вышло что в коде и в файле названия различаются?
нашел )) в тотал командере при копировании опция включена была, переводить имена файлов в нижний регистр
Пробую установить Yii при помощи Composer. На команду: Код (Text): composer create-project --prefer-dist yiisoft/yii2-app-basic basic выдается сообение: Код (Text): Reading bower.json of bower-asset/jquery.inputmask (3.1.43) Could not fetch https://api.github.com/repos/RobinHerbots/jquery.inputmask/contt Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer7 to retrieve a token. It will be stored in "/home/eboxadmin/.composer/auth.json". Token (hidden): Где брать этот токен?
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer7 to retrieve a token. м?
Ok, отлично. Только я пока не знаю что такое MVC. Прочитал пару статеек, в итоге не могу четко провести границу между моделью и контроллером, и между контроллером и представлением. Кажется когда в лохматом 2005-м я делал cms-ку то у меня там было два модуля всего: Модуль отвечающий за модель, и модуль отвечающий за прицепку оформления к модели. Ну а сами оформления (html-css-png шаблоны) не были программным кодом. В общем я почитав немного по MVC не понял что куда пихать. model и view не перепутаю. А границу между view и controller, а так же между controller и model провести не могу. Такой вопрос - бизнес логика куда пишется - в модель или в контроллер?
Бизнес-логика - в модель или в сервисный слой, есть два подхода. В конроллер плохо - они тогда раздуваются, и тогда тяжелее проект на другой фреймворк переносить. Теоретически, модели надо писать так, чтоб можно было их переносить в другой фреймворк без изменений. На практике правда у меня этого не получалось пока.
Угу. А тогда что в контроллер пихать? Если бизнес логика в модель, а отображение в view. В контроллер пихать обработчик ввода?
контроллер должен выполнять действия, связанные с приемом/передачей данных, вызовами конкретных моделей/вьюх. вроде как точка, управляющая внутренними направлениями, что и куда. вроде как
А как ты сделаешь, если фреймворки обычно предоставляют свою реализацию моделей? Только если писать обертку над ними ) p.s. я за сервисный слой. Бизнес-логика собирается в одном месте, а не размывается по моделям-контроллерам. К тому же при такой схеме удобно прикручивать event`ы на отдельные действия для расширения логики. p.p.s Так же бизнес-логику можно разобрать на отдельные действия и реализовать в виде команд: один класс - одно действие, название класса точно описывает что произойдет. Бонусом получаем простой и самодокументируемый код.
Ну к примеру в книге Софронова по Yii2 предлагается делать специальный слой между моделями приложения и Yii2 ActiveRecord, т.е. по сути он там делает Data Mapper над Yii2 ActiveRecord. И пишет для чего: Хотя лично мне лень обычно возиться
Загляну пожалуй. Не очень мне нравится эта документация. Всё работает, а как - непонятно. Я пока даже не понял что это за значок такой: <?= Или где справочник по функциям. Вот например штука return "$this->render('say', ['message' => $message]);" - суют его всюду и везде, а справки по нему на видном месте нет. Где методы моделей? Используют, но не объясняют какие там есть. По фильтрам вообще ничего не понял, как их создавать, использовать, каков синтаксис, какие доступны фильтры, какие нет. Навалено всё в одну кучу. Документация блин.
А почему документация по фреймворку вам должна объяснять основы PHP? Этот значок обозначает <?php echo, только более кратко. Раньше его можно было использовать только при разрешённых коротких тегах, но в php 5.4 разрешили использовать независимо от этой опции. Зачем лезть в сложный фреймворк, если вы php толком не знаете? Там две документации. Одна - просто как что делать, а другая - конкретно по всем классам. Где вторая на русском не знаю, пользуюсь английской: http://www.yiiframework.com/doc-2.0/index.html. Если то, вот первая на английском. Там более удобно пользоваться, поскольку все ссылки работают, в отличие от русской на github. Ну и в принципе, с английским такого уровня проблем не должно быть у программиста, иначе нет смысла программированием заниматься. http://www.yiiframework.com/doc-2.0/guide-README.html