Сделать одностраничное приложение (SPA) используя vueJs, vuex, vue-router Приложение должно содержать 2 страницы: 1 страница: форма с полями (имя, обращение). Форма должна отправляться на бэкенд и сохраняться в локальном store (vuex) 2 страница: отображает списком эти формы, только то, что отправляли на 1 странице и было сохранено во vuex, без запроса к бекенду. (Если после обновления страницы данные пропадут, это нормально) Переключение между страницами сделать через vue-router без перезагрузки. Дизайн и внешний вид вообще не важен, смотрим на использование vuex, vue-router.
Принимать данные с фронта и сохранять данные через статическую фабрику (реализовать Static Factory). В фабрику передается database или email строкой при создании. И у фабрики должен быть метод save(). Фабрика должна выбрать место для сохранения и сохранить (данные можно и не сохранять, просто реализовать методы).
Что необходимо использовать:
- PHP 7 и выше
- ООП (для реализации фабрики сохранения)
- Фреймворк Laravel
- Обязательно Vuejs, Vuex, Vue-Router
Версия PHP 8.0+ так как метод match
требует минимум 8 версию.
final class StaticFactory
{
public static function factory($data, $storage)
{
return match ($storage) {
'database' => new DatabaseHandler($data),
'email' => new EmailHandler($data)
};
}
}
VueJS подключён с помощью CDN, Фронтенд собирать не нужно.
folder заменить на название папки
-
git clone https://github.com/Div-Man/laravel-vue.git folder
-
composer update
-
cp .env.example .env
-
php artisan key:generate
При необходимости, если будет ошибка Permission denied, изменить доступ к папкам и файлам
sudo chown -R www-data:www-data storage/logs
sudo chown -R www-data:www-data storage/framework/sessions
sudo chown -R www-data:www-data storage/framework
sudo chown -R www-data:www-data storage/framework/cache
sudo chown -R $USER:www-data storage
sudo chown -R $USER:www-data bootstrap/cache
chmod -R 775 storage
Конфигурая Apache, которая использоватлась при разработке:
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/laravel-vue/public
RewriteEngine On
<Directory /var/www/laravel-vue/public/>
AllowOverride All
Order allow,deny
Allow from all
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
При отправке формы, в консоле по умолчанию, должно быть написано Сохранение в базу.
Все роуты работают без перезагрузки, можно каждый роут открыть отдельно.