Symfony первые шаги |
Как и Вы мне скорее захотелось посмотреть как работает Symfony обратившись к ней в браузере. Но, прежде чем продолжить, тем кто не знает, хочу напомнить, что Symfony изначально умеет работать как минимум в двух окружениях (режимах):
Самой главное, что Вы дожны знать прежде чем начать изучать Symfony, это помните о логах, которые для Вас любезно пишутся в директорию /Symfony/app/logs
А первое что нужно сделать прежде чем начать работать с Symfony, это выставить права на запись для директорий:
Но, как это сделать правильно, написано здесь » Если этого не сделаете, как собственно это сделал я, то попадете на кучу граблей описанных мной ниже. Теперь откройте в браузере /config.php На этой странице вы увидите рекомендации по исправлению недочетов и неисправностей, если такие будут присутствовать. Какие-то из них обязательны (MAJOR PROBLEMS) для исполнения, а другие только рекомендованы (RECOMMENDATIONS) для улучшения работы Symfony. Решение проблемы доступа по IP Изначально Symfony нам дает dev для тестирования с помощью /app_dev.php однако который не работает и выдает ошибку:
с этим все очень банально нужно закомментировать проверку по IP, которая прописана в файле /app_dev.php Просто программисты обычно тестируют на своей локальной машине, у которой внутренний IP 127.0.0.1 Чистим кэш Прежде чем начать работать с prod-окружением нужно знать, что Symfony в этом режиме будет кэшировать все что только может, а значит любая Ваша ошибка будет закэширована. Так вот, чтобы Вы могли исправить ошибку Вам нужно будет очистить кэш, а очистить кэш можно командой:
тем не менее, если Вы выполните эту команду в консоли, то получите нехватку прав доступа, а все потому, что команда будет пытаться удалять файлы созданные пользователем Apache. Таким образом, чтобы команда сработала, нужно выполнить ее от пользователя Apache, а это можно сделать двумя способами:
в первом способе Вам понадобится разрешение выполнять команды от пользователя Apache, которого скорее всего у Вас нет, т.к. изначально оно не настроено, а значит нужно будет обратиться к администратору сервера или если Вы самостоятельно админите сервак - настроить себе эту возможность. Мы не будем прибегать к sudo, т.е. просто напишем вот такой скрипт:
можно написать и совсем жестко:
Решение проблемы использовать prod-окружение Протестировав все урлы /app_dev.php например /app_dev.php/demo/ я решил протестировать /app.php т.е. prod. Однако, открыв главную страницу сайта, я получил ошибку:
эта проблема образовалась из-за того, что я забыл /Symfony/app/config/routing.yml прописать хотя бы один роутинг. Поэтому я взял и скопировал в файл /Symfony/app/config/routing.yml все содержимое файла /Symfony/app/config/routing_dev.yml И открыв в браузере урл /app_dev.php я опять получил ошибку 500, это меня смутило и я начал разбираться. Оказалось в содержании файла /Symfony/app/config/routing_dev.yml в конце написано:
что означает подключить /Symfony/app/config/routing.yml Следовательно, Symfony поступил как мы ему сказали:
Я думаю, Вы поняли, что в файле /Symfony/app/config/routing_dev.yml нужно закомментировать:
а в файле /Symfony/app/config/routing.yml вообще эти строчки не нужны. Хорошо, эту проблему мы побороли, подумал я и решил, что для тестирования хотя бы главной страницы сайта Продакшен-версии, в файле /Symfony/app/config/routing.yml достаточно будет лишь одного роутинга.
Решение проблемы вызова контроллера прописанного в роутинге Не смотря на то, что мы прописали всего один роутинг, который отлично работает в dev-окружении, в prod этот роутинг не сработал и в логах появилась ошибка:
Оказалось, что проблема кроется в том _controller: AcmeDemoBundle:Welcome:index просто неизвестен Symfony в prod-окружении. Подтверждение тому можете найти в файле /Symfony/app/AppKernel.php где прописано условие: if (in_array($this->getEnvironment(), array('dev', 'test'))) { В этом файле указаны все бандлы, которые регистрирует Symfony, т.е. те о которых она знает. Как Вы поняли, раз Symfony ничего о банле AcmeDemoBundle не знает, значит и обратиться к классу WelcomeController, не говоря уже про вызов метода indexAction. Поэтому, не мы такие, а Symfony таков, и все в нем правильно, просто мы не знаем про подобные подводные камни. Ну, а решение данной проблемы может быть двух видов:
Я решу проблему вторым способом, а посему почистил кэш, удалил все что написал в файле /Symfony/app/config/routing.yml и выполнил команду:
И если на все вопросы отвечать кнопкой Enter, то мы получим следующее:
Чтобы закрепить знания, давайте напишем роутинг для главной страницы prod-окружения. Для этого в файл /Symfony/src/Acme/HelloBundle/Resources/config/routing.yml добавим:
а в файл /Symfony/src/Acme/HelloBundle/Controller/DefaultController.php добавим метод:
Вот и все, теперь удалите кэш и заходите на страницу /app.php/ или просто / Для укрепления знаний советую:
|
|
Похожие статьи: |
Справочники и учебники: |
Огромное спасибо, статья очень помогла. |
Статья полностью бредовая, ничего не работает. Решение проблемы полностью отсутствует!!! Вот решение проблемы! Прописываем в app/config/config_prod.yml doctrine: orm: auto_generate_proxy_classes: true proxy_dir: '%kernel.cache_dir%/doctrine/orm/Proxies' proxy_namespace: Proxies |
Более актуальная документация https://symfony.com.ua |
« Phpunit средствами Netbeans | Symfony Doctrine YML » |
Главная | PHP | MySQL | Unix | JavaScript | Desktop | Дизайн | Продвижение | Другое |
X |
Новые заметки:→ Почему задачи выполняют долго → Равномерное распределение данных |
Последние комменты:19.08.2018 18:57, 100 комментов
14.08.2018 10:43, 1 коммент
09.08.2018 06:02, 309 комментов
08.08.2018 02:52, 1 коммент
25.07.2018 10:07, 2 коммента
|
Yapro CMS:→ Плагины
|