Наилучшая практика интеграции VueJS с CakePHP 3
Я хотел бы знать, как лучше всего интегрировать Vue.JS framework внутри приложения CakePHP 3?
Я надеюсь, что есть способ извлечь выгоду из всех инструментов, идущих с VueCLI (webpack,ect..) при этом все еще работает без необходимости копировать сгенерированный файл внутри приложения CakePHP.
Итак, каков наиболее упрощенный процесс разработки приложения, использующего CakePHP 3 в качестве бэкенда и Vue.js как frontend внутри того же проекта.
Спасибо а много!
2 ответа:
Хорошо, вот быстрая настройка:
1) Установите vuejs в субдире webroot (например, webroot/vuedev)
2) настройте маршрутизатор vue на использование режима истории:
3) Измените assetsPublicPath зоны сборки наexport default new Router({ mode:'history', routes: [
assetsPublicPath: '',
в файле webroot/vuedev/config/index.js 4) потому что в режиме dev ваше приложение работает на localhost:8080 и ваш ajax вызов your-domain.dev у вас будут проблемы с CORS. Добавьте заголовок к вашим вызовам ajax:axios.get(url,{headers: {"Access-Control-Allow-Origin": "*"}}).then...
Используйте a префикс " api " для ваших вызовов ajax : your-domain.xxx / api / контроллер / действие...
5) измените маршрутизацию cakePHP для использования REST api : в config / routes.php:
// add api prefix Router::prefix('api', function ($routes) { $routes->fallbacks(DashedRoute::class); }); // change default route : Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/:page',['controller'=>'Pages','action'=>'display']); $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); $routes->fallbacks(DashedRoute::class); });
Ajax вызывает your-domain.xxx / api / controller / action будет выполняться нормально. Каждый призывает к your-domain.com/xxx будет перенесен на страницы контроллера, отображение действий.
6) скопируйте индекс.HTML-содержимого вашего антивируса Webroot/vuedev в шаблон дома (в src/шаблона/страницы/дома.ОСАГО) и добавить в ваше действие дисплея вашего контроллера.$this->viewBuilder()->setLayout(false);
7) для производства : Запуск процесса строительства:
npm run build.
Копия антивируса Webroot/vuedev/дист/статический к Webroot/статический
Скопируйте содержимое webroot / vuedev / dist / index.html к вашему src / шаблону / страницам / дому.ctp
Если кто-то вручную вызовет определенную страницу или обновит браузер (ie: your-domain.xxx / Products) ваш контроллер страниц отправит индекс.содержимое HTML. Вы можете добавить te param: page в свой шаблон / Pages / home.ОСАГО в глобальный VAR в теге сценария, который будет использоваться маршрутизатором:
<script>var routeToJump=<?php echo $yourvar;?>; </script>
И в вашем приложении.vue:
export default { name: 'App', created() { this.$router.push(routeToJump); ...
Вы не уйдете, не скопировав файлы, за исключением того, что вы не заботитесь о размере и времени загрузки. Просто бросьте все в свой webroot / js, затем загрузите все необходимые файлы в свои представления, и вы в порядке. Vue - это JS, просто JS, ничего больше. Кроме того, я не понимаю, почему совладание, которое происходит автоматически, плохо.
Приложения IMO JS-это огромный беспорядок, склеенный каким-то образом сценариями сборки.
Если вы заботитесь об оптимизированной сборке, используйте npm и webpack и настройте Webpack для сборки вашего Приложение Vue и определить свой вирус в качестве целевой папки. Webpack позволит вам автоматически разделять файлы и даст вам предупреждение, когда файл станет большим.
Мы поместили все наши интерфейсные материалы в /resources/js и / scss и так далее, построили его и включили горячую перезагрузку, чтобы мы могли видеть изменения сразу после того, как нажмем save. Это только для развития. При развертывании в нашей Live-системы на JS-это построить на живую систему, мы не добавляем каких-либо построений на наш мерзавец хранилище.
Однако "создание" приложений JS для frontend-это боль в заднице, если вы не придерживаетесь 100% чистого приложения JS frontend. Нет никакого реального стандартного способа сделать это. Даже "импорт" имеет свои причуды и больше похож на взлом, чем на хорошее решение проблемы, а также не решает проблему упаковки файлов для уменьшения запросов и размера файла.
После того, как вы склеили все дерьмо вместе, это обычно работает хорошо, но это действительно печально, что в 2018 году не рекомендуется стандарт для построения JS для веб-приложений. Я очень надеюсь, что то, как все делается сегодня, скоро умрет в пользу веб-сборки.
Если вы не хотите использовать Webpack, есть require.js и другие тоже, но для нас webpack работал лучше всего.