Это веб -приложение Laravel для проектов краудсорсинга и анкет.
.env.envПредложение кода по лицензиям с открытым исходным кодом включает в себя множество преимуществ. Из тех, кто связан с нашим проектом, есть:
Официальная установка ECAS
Scify Официальная установка
Инструкции по настройке были разделены на два раздела для ясности:
Независимо от метода установки, вам нужно будет запустить следующие команды для настройки приложения.
Эти команды должны выполняться вне любого контейнера Docker:
sudo chown -R ` whoami ` :www-data storage
chmod 775 storage
cd storage/
find . -type f -exec chmod 664 {} ;
find . -type d -exec chmod 775 {} ;В зависимости от метода установки, вы должны запустить остальные шаги либо в контейнере Docker, либо на локальной машине.
Примечание. Если вы используете Docker Compose, сначала вам понадобится сначала для входа в контейнер PHP:
docker exec -it crowdsourcing_platform_server bashа затем запустите остальные команды.
Если вы запускаете команды на своей локальной машине, вы можете запустить следующие команды напрямую.
Если вы начали DDEV, вы должны запустить все команды, префиксированные ddev exec .
.envПосле клонирования проекта создайте файл .env (должен быть копией .env.example):
cp .env.example .envВ случае установки без докеров вам необходимо будет создать базу данных для приложения.
В случае среды Docker введите контейнер crowdsourcing_platform_db и создайте базу данных с именем crowdsourcing_db_docker :
docker exec -it crowdsourcing_platform_db bashВведите оболочку MySQL:
mysql -u root -pЗатем запустите следующую команду MySQL:
CREATE DATABASE IF NOT EXISTS crowdsourcing_db_docker;Сначала вам нужно будет войти в контейнер DB:
docker exec -it crowdsourcing_platform_db bashЕсли у вас есть существующий файл дампа MySQL, убедитесь, что он находится в текущем каталоге, и импортируйте его в базу данных:
mysql -u root -p crowdsourcing_db_docker < dump.sql Затем добавьте следующее в файл .env :
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=crowdsourcing_db_docker
DB_USERNAME=root
DB_PASSWORD=rootПримечание. Если вы используете Docker Compose, вам нужно сначала ввести контейнер сервера :
docker exec -it crowdsourcing_platform_server bashphp artisan migratephp artisan db:seedВведите контейнер PHP (если с помощью Docker Compose):
docker exec -it crowdsourcing_platform_server bashЗатем запустите следующие команды:
composer install
composer dump-autoloadphp artisan key:generatenpm install
npm run dev # (if in development mode, use for live changes)
npm run build # (if in development mode)
npm run prod # (if in production mode)По умолчанию изображения хранятся в приложении/хранилище/публике. Бегать
php artisan storage:link.env А затем сохраняет настройки .env в кеш Laravel:
php artisan config:cacheЧтобы связать эту папку с публичным каталогом
Это приложение использует плагин Laravel Socialite для обработки социального входа.
Чтобы заставить его работать в вашей среде разработки, вы должны убедиться, что у вас есть ключи API и секреты для Facebook и Twitter (руководства здесь и здесь), и что вы можете получить доступ к https: //dev.crowdsourcing/ (обратите внимание на https) на своей машине.
Руководство для включения HTTPS на вашей локальной машине можно найти здесь.
В основном вам нужно бежать
openssl req -new -sha256 -newkey rsa:2048 -nodes
-keyout dev.crowdsourcing.key -x509 -days 365
-out dev.crowdsourcing.crtСпражите 2 сгенерированные файлы в файле конфигурации Nginx приложения. Убедитесь, что вы изменили порт на 443, как показано ниже:
server {
listen 443 ssl;
server_name dev.crowdsourcing;
ssl_certificate /path/to/dev.crowdsourcing.crt;
ssl_certificate_key /path/to/dev.crowdsourcing.key;
root /var/www/crowdsourcing/public;
add_header X-Frame-Options "SAMEORIGIN" ;
add_header X-XSS-Protection "1; mode=block" ;
add_header X-Content-Type-Options "nosniff" ;
index index.php index.html index.htm index.nginx-debian.html;
charset utf-8;
location / {
try_files $uri $uri / /index.php? $query_string ;
}
location = /favicon.ico { access_log off ; log_not_found off ; }
location = /robots.txt { access_log off ; log_not_found off ; }
error_page 404 /index.php;
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
}
location ~ /.ht {
deny all ;
}
}Кроме того, обязательно перезапустите Nginx, запустив
sudo systemctl restart nginx В этом приложении используется плагин Spatie - Laravel Sitemap, чтобы создать файл public/sitemap.xml (который исключается из GIT), который будет ползти поисковыми системами. Чтобы запустить генератор для текущей установки приложения, запустите встроенную команду Laravel:
php artisan sitemap:generateЭто приложение использует пинту Laravel для выполнения кода.
Чтобы запустить стилера, запустите:
./vendor/bin/pint --test -v # the --test will not do any changes, it will just output the changes needed
./vendor/bin/pint -v # this command will actually perform the code style changes Это приложение использует Eslint и красивее для выполнения кода.
Чтобы запустить Styler & Formatter, запустите:
npm run lint # this command will check the code style
npm run format # this command will format the code style Этот проект использует бесплатный шаблон Adminlte.
Он также использует начальную загрузку 4
Приложение может быть настроено и персонализировано для каждой установки. В файле .env вы можете установить переменную INSTALLATION_RESOURCES_DIR соответственно. Эта переменная должна принимать значение, которое представляет имя каталога в каталоге resourcess/views/home/partials . Например, см. Справочник resourcess/views/home/partials/together . Этот каталог должен содержать файлы частичных лезвий для установки.
Эта часть документации описывает структуру каталога приложения Laravel.
В основном он оценивается в пользовательских каталогах и файлах, которые используются в приложении. Для общей структуры каталога Laravel, пожалуйста, обратитесь к официальной документации.
├── app # Laravel application directory
│ ├── BusinessLogicLayer # Business Logic Layer classes (services that contain the business logic and delegate from Controllers towards the Data Access Layer)
│ ├── Http/Controllers # Controllers directory (classes that handle the HTTP requests, perform the necessary validations/operations and return the responses)
│ ├── Http/Middleware # Middleware directory (classes that handle the HTTP requests before they reach the Controllers)
│ ├── Models # Models directory (ORM classes that represent the database tables and contain the relationships between them)
│ ├── Notifications # Notifications directory (classes that handle the notifications, like emails)
│ ├── ViewModels # View Models directory (classes that contain the data that will be passed to the views)
│ ├── Repository # Repository directory (classes that handle the database operations and contain the DB/ORM queries)
│ resources # Resources directory (contains the views, assets, front-end files, and other resources)
│ ├── views # Views directory (contains the blade files that are used to render the HTML)
│ ├── assets # Assets directory (contains the front-end assets like CSS, JS, images, etc.)
│ ├── js # JavaScript files (contains the Vue.js components and other JS files)
│ ├── sass # SASS files (contains the SASS files that are compiled to CSS)
│ ├── lang # Language files (contains the language files for the translations)
Приложение использует шаблон хранилища для отделения бизнес -логики от логики доступа к данным.
Все операции базы данных обрабатываются классами репозитория, которые содержат запросы DB/ORM.
Эти классы расположены в каталоге app/Repository , и все они расширяют класс app/Repository/Repository .
Каждый дочерний класс представляет таблицу/сущность базы данных и содержит запросы для этой таблицы. Эта сущность определяется в каталоге app/Models и на это ссылается класс репозитория дочерних репозиторий в методе getModelClassName .
Таким образом, мы можем использовать базовые методы, которые определены в классе Repository , такие как getAll , getById , create , update , без необходимости писать те же вопросы в каждом детском классе. Мы также можем определить пользовательские запросы в детских классах или при необходимости переопределить базовые методы.
Классы репозитория используются классами слоев бизнес -логики, которые содержат бизнес -логику и делегируют от контроллеров к уровню доступа к данным.
Более подробную информацию о шаблоне хранилища можно найти здесь.
Убедитесь, что вы очистили любой кэш и файлы конфигурации:
php artisan cache:clear
php artisan config:clearСоздайте файл тестовой базы данных:
touch storage/database_testing.sqliteДайте необходимые разрешения в файл тестовой базы данных:
chmod 777 storage/database_testing.sqliteЗатем убедитесь, что вы настроили тестовую базу данных:
Запустите миграции и сеялки для тестовой базы данных:
php artisan migrate:fresh --seed --env=testing --database=sqlite_testingphp artisan test Вы можете запустить тесты, используя php artisan test , которая является встроенной командой Laravel.
И, наконец, запустите тесты:
# Note that you filter the tests by using the --filter flag (without the = sign)
php artisan test --env=testing --filter {METHOD OR CLASS NAME} --coveragerun-tests.sh Вы также можете запустить тесты, используя сценарий run-tests.sh , который является оберткой вокруг команды Phpunit.
chmod +x run-tests.sh
./run-tests.sh Это также может принять любые аргументы (например, флаг --filter или --coverage ), которые вы передали бы в команду Phpunit.
./run-tests.sh --filter {METHOD OR CLASS NAME}или
./run-tests.sh --coverageИспользуя Docker Compose, вы можете отлаживать приложение, выполнив эти шаги:
docker compose up , чтобы запустить контейнеры..vscode/launch.json файл. {
"version" : " 0.2.0 " ,
"configurations" : [
{
"name" : " Listen for Xdebug " ,
"type" : " php " ,
"request" : " launch " ,
"port" : 9003 ,
"pathMappings" : {
"/var/www" : " ${workspaceFolder} "
},
"log" : true
}
]
}Теперь вы можете начать отладку вашего приложения.
Для отладки тестов:
docker exec -it crowdsourcing_platform_server bash чтобы войти в контейнер PHP.php artisan app:test --filter {METHOD OR CLASS NAME} . Например, php artisan app:test --filter authenticatedNonAdminUserCannotAccessCreatePage . Если вы столкнетесь с какими -либо проблемами, обратитесь к следующим шагам:
docker compose logssystemctl status nginx и systemctl status php-fpmstorage/logs/laravel.log.env имеет правильные учетные данные базы данныхsystemctl status mysqlnginx -t Чтобы внести свой вклад в приложение, выполните следующие действия:
git checkout -b <branch_name> .git commit -m '<commit_message>'git push origin <project_name>/<location>Этот проект представляет собой программное обеспечение с открытым исходным кодом, лицензированное по лицензии Apache, версия 2.0.
Этот проект разработан SCIFY и ECAS и основан на рамках LARAVER. Проект поддерживается SCIFY.
Некоторые из изображений, используемых в приложении, от Freepik.
Не стесняйтесь обращаться к сопровождающим проекту: