BEAR.Sunday + Vue.js로 시작하는 단일 페이지 애플리케이션
11857 단어 SPAVue.jsBEAR.Sunday
여기에서는 Vue.js 의 webpack-simple template의 백엔드를 BEAR.Sunday 로 구축한 싱글 페이지 어플리케이션을 만들어 보고 싶습니다.
운영 환경
소스 코드는 GitHub에서 공개합니다.
이 항목에서 소개되지 않은 자세한 내용은 완성 된 버전의 소스 코드 및 각 커밋을 참조하십시오
webpack-simple template에서 Vue 앱의 병아리 만들기
먼저 webpack-simple template에서 Vue 앱의 병아리를 만듭니다.
$ vue init webpack-simple advent-vue-project
? Project name advent-vue-project
? Project description A Vue.js project
? Author
? License MIT
? Use sass? No
vue-cli · Generated "advent-vue-project".
To get started:
cd advent-vue-project
npm install
npm run dev
$ tree -a -L 1
.
├── .babelrc
├── .editorconfig
├── .gitignore
├── README.md
├── index.html
├── package.json
├── src
└── webpack.config.js
$ npm install
$ npm run dev
> [email protected] dev /Users/Yuu/workspace/advent-calendar/advent-vue-project
> cross-env NODE_ENV=development webpack-dev-server --open --hot
Project is running at http://localhost:8080/
webpack output is served from /dist/
404s will fallback to /index.html
npm run dev
를 실행하면 브라우저에서 자동으로 응용 프로그램이 시작됩니다.BEAR.Skeleton에서 BEAR 앱의 병아리 만들기
그런 다음 BEAR.Skeleton에서 BEAR 앱의 병아리를 만듭니다.
또한 응용 프로그램의 항목 화면을 HTML로 렌더링하기 위해 madapaja/twig-module을 설치합니다.
$ composer create-project -n bear/skeleton MyAdvent.MyProject
$ tree -a -L 1
.
├── .env
├── .gitignore
├── .php_cs.dist
├── README.md
├── autoload.php
├── bootstrap
├── composer.json
├── composer.lock
├── phpcs.xml
├── phpmd.xml
├── phpunit.xml.dist
├── public
├── src
├── tests
├── var
└── vendor
$ composer require madapaja/twig-module
TwigModule をアプリケーションにインストールし、Twigテンプレートファイルを作成する
以下のコミットを参照
https://github.com/kawanamiyuu/Kawanamiyuu.VuejsSpa/commit/5ba0dc0518b9063bd47988a4b29470750cc41312
$ php -S 127.0.0.1:8080 -t public
Vue 앱의 클라이언트 코드를 BEAR 앱으로 포팅
Vue 응용 프로그램의
src
디렉터리를 src-ui
로 BEAR 응용 프로그램에 이식합니다.$ tree -a -L 1
.
├── .babelrc <--
├── .env
├── .gitignore
├── .php_cs.dist
├── README.md
├── autoload.php
├── bootstrap
├── composer.json
├── composer.lock
├── node_modules <--
├── package.json <--
├── phpcs.xml
├── phpmd.xml
├── phpunit.xml.dist
├── public
├── src
├── src-ui <--
├── tests
├── var
├── vendor
└── webpack.config.js <--
webpack.config.js
를 편집하여 Vue 응용 프로그램을 빌드할 위치를 BEAR 응용 프로그램의 진입점인 public
아래로 변경합니다. module.exports = {
- entry: './src/main.js',
+ entry: './src-ui/main.js',
output: {
- path: path.resolve(__dirname, './dist'),
+ path: path.resolve(__dirname, './public/dist'),
publicPath: '/dist/',
filename: 'build.js'
},
페이지 콘텐츠를 Ajax로 표시
Vue 앱 콘텐츠(Essential Links 및 Ecosystem 링크 URL 및 라벨)를 Ajax에서 백엔드에서 가져오고 표시합니다.
클라이언트 측 라우팅에는 vue-router을 사용하고 백엔드와의 Ajax 통신에는 axios을 사용합니다.
BEAR 앱의 특정 페이지 리소스에서 Json 렌더링을 수행하기 위해 AOP에서 렌더러를
JsonRenderer
로 바꿉니다.// src/Module/JsonRendererInterceptor.php (新規)
use BEAR\Resource\JsonRenderer;
use BEAR\Resource\ResourceObject;
use Ray\Aop\MethodInterceptor;
use Ray\Aop\MethodInvocation;
class JsonRendererInterceptor implements MethodInterceptor
{
public function invoke(MethodInvocation $invocation)
{
$ro = $invocation->getThis();
/* @var $ro ResourceObject */
$ro->setRenderer(new JsonRenderer);
return $invocation->proceed();
}
}
// src/Module/AppModule.php (編集)
use Kawanamiyuu\VuejsSpa\Annotation\Api;
use Ray\Di\AbstractModule;
class AppModule extends AbstractModule
{
protected function configure()
{
// ...
$this->bindInterceptor(
$this->matcher->annotatedWith(Api::class),
$this->matcher->startsWith('on'),
[JsonRendererInterceptor::class]
);
// ...
}
}
// src/Resource/Page/Links.php (新規)
use BEAR\Resource\ResourceObject;
use Kawanamiyuu\VuejsSpa\Annotation\Api;
/**
* @Api
*/
class Links extends ResourceObject
{
public function onGet()
{
$this['essential_links'] = [
[
'label' => 'Core Docs',
'url' => 'https://vuejs.org'
],
// ...
];
$this['ecosystem_links'] = [
[
'label' =>'vue-router',
'url' => 'http://router.vuejs.org/',
],
// ...
];
return $this;
}
}
이것으로 초기 표시 후, 클라이언트 측에서 라우팅하고 (해당 커밋 ), 한편 비동기로 컨텐츠를 표시한다 (해당 커밋 ) 싱글 페이지 어플리케이션이 완성되었습니다.
↓↓↓ (
Welcome to Your Vue.js App
클릭)Reference
이 문제에 관하여(BEAR.Sunday + Vue.js로 시작하는 단일 페이지 애플리케이션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kawanamiyuu/items/80442109b65b1861650e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)