Vue.js(Vue-CLI 3) +cakephp +mysql SPA開発(11) #Vue.js #web #php
index:
準備など
・cakephp2, ver2 を clone
https://github.com/cakephp/cakephp
・事前にDBの、作成。
表(tasks) の作成。
https://github.com/kuc-arc-f/apiphp1_ver1/blob/master/db/tasks.sql
・Linux の場合、mod_rewrite エラーが出る場合
a2enmod で有効化
sudo a2enmod rewrite
・rewrite の確認
ls -l /etc/apache2/mods-enabled/ | grep rewrite
・AllowOverride の設定
/etc/apache2/sites-available/000-default.conf
<Directory "/var/www/html/apiphp1"> AllowOverride All </Directory>
・ apacheの再起動
sudo systemctl restart apache2
・cakeの書込みエラーが出る場合は、権限の追加。
chmod -R 777 app/tmp/
実装など
コントローラ TasksController.php
https://github.com/kuc-arc-f/apiphp1_ver1/blob/master/app/Controller/TasksController.php
api_index
// public function api_index() { $this->Task->recursive = 0; $this->Paginator->settings = array( 'limit' => 10 ,'order'=> array('Task.id'=>'desc') ); $dats = $this->Paginator->paginate(); $arr = array(); foreach ($dats as $dat){ $arr[] = $dat["Task"]; } header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept'); echo(json_encode($arr )); exit(); }
api_add
public function api_add() { if ($this->request->is('post')) { $this->Task->create(); $json =''; if ($this->Task->save($this->request->data)) { $json = json_encode(['title' => $this->request->data["Task"] ]); } else { $json = json_encode(['message' => 'The task could not be saved. Please, try again.' ]); } header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept'); echo( $json ); exit(); } }
Vue.js 側
Index.vue
https://github.com/kuc-arc-f/vue_2_cake/blob/master/src/components/Tasks/Index.vue
import axios from 'axios' import {Mixin} from '../../mixin' export default { mixins:[Mixin], created () { this.baseUrl = this.sysConst.API_BASE; console.log( this.baseUrl ) this.getTasks() }, data () { return { tasks: [], user_id : '', baseUrl : '' } }, methods: { getTasks() { var url = this.baseUrl +'tasks/api_index' console.log(url) axios.get(url) .then(res => { this.tasks = res.data console.log(res.data.length ) }) }, } }
関連のページ
Laravel 5 を、aws EC2 インストール編 #web #php #Laravel
index:
概要:
Laravel 5 を、aws EC2 ,Amazon Linux 2
に追加する手順等になります。
・手順に、抜けがあるかもしれませんが。
・インストール時に、メモリ不足で、composerが強制終了
する場合が、ありましたが。回避方法は複数ありそうでしたが
下記の手順で、インスタンス再起動後、apache ,mysqlを終了後、
に追加すると、正常インストールできました。
参考
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html
・aws の、LAMP追加方法が参考になりました。
上記の手順では、拡張モジュールが不足していましたので
追加モジュールの対応後、インストールの手順となりました。
参考の設定方法
sudo yum update -y sudo amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2 sudo yum install -y httpd mariadb-server sudo systemctl start httpd sudo systemctl enable httpd sudo systemctl start mariadb sudo systemctl enable mariadb
・mbstring, dom のエラーが出たので、追加モジュール対応
sudo yum install --enablerepo=remi-php72 php-mbstring php-openssl sudo yum install php-xml
Laravel インストール
・上記の手順で、開始すると。
メモリ不足で、composer が強制終了したので、
ログアウト、インスタンス再起動後
インストールした方が良いかもしれません。
・LAMP系のサービスの停止( とりあえず、メモリ確保の為に停止 )
sudo systemctl stop httpd sudo systemctl stop mariadb
・composer の追加
curl -sS https://getcomposer.org/installer | php
・インストール
php composer.phar create-project --prefer-dist laravel/laravel spa1 "5.6.*"
Vue.js +php, ローカルHTMLからクロスドメイン接続版 #Vue.js #web #php
index:
概要:
前のVue.js 関連で、
クロスドメイン構成の仕組みで、アプリ構築する事例となります。
以前の, Vue-CLI +firebase 構成と似ていますが。
バックエンドは、以前の自前APIサービスで
Codeigniter3 のphp軽量フレームワーク、sqlite3
の構成となります。
・ローカルのフォルダからも、htmlをブラウザ開くと
全ての機能が使用できる。アプリ構成としました
環境
Vue.js
php7.1
sqlite3
jQuery
ajaxのクロスドメイン対応
・ajax で、クロスドメイン通信する場合は。通常はエラーになりますが
phpで、ヘッダ情報を追加すると回避できました。
・コントローラに追加しています。
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept');
実装など
・画面間のキー情報は、localStorage
で、渡しています。
・index
https://github.com/kuc-arc-f/vue3_cros_ver1/blob/master/index.html
var baseUrl = 'http://127.0.0.1/code-3/'; console.log(baseUrl) // var app = new Vue({ el: '#app', created() { this.getTasks() var dat = exStorage.load(sysConst.STORAGE_KEY_pageId ) //exStorage.remove(sysConst.STORAGE_KEY_pageId) console.log(dat[0]) }, data: { tasks : [], }, methods: { getTasks() { var url = this.conv_url('api/tasks') axios.get(url) .then(res => { this.tasks = res.data //console.log(res.data.length ) }) }, conv_url(url) { return baseUrl + url }, move_url(id) { console.log(id) var store = [] store.push({ 'id' : id }) exStorage.save(sysConst.STORAGE_KEY_pageId , store) window.location.href='show.html' // console.log(sysConst.STORAGE_KEY_pageId) } } });
・show
https://github.com/kuc-arc-f/vue3_cros_ver1/blob/master/show.html
var baseUrl = 'http://127.0.0.1/code-3/'; console.log(baseUrl) // var app = new Vue({ el: '#app', created() { var dat = exStorage.load(sysConst.STORAGE_KEY_pageId ) console.log(dat.length ) if(dat.length < 1){ alert('表示IDの取得に失敗しました。'); }else{ this.task_id= dat[0].id } }, data: { item : [], task_id: 0, }, mounted: function() { this.getItem(); }, methods: { getItem() { var url = this.conv_url('api/tasks/show/'+ this.task_id) console.log(url) axios.get(url) .then(res => { this.item = res.data // console.log(res.data ) }) }, conv_url(url) { return baseUrl + url }, } });
Vue.js +Codeigniter3 +sqlite 設定など
index:
環境
Vue.js
php7.1
sqlite3
jQuery
参考の設定
準備
・sqliteの設定
application\sqlite\db1.sqlite に配置した場合。
database.php
https://github.com/kuc-arc-f/code-2_ver1/blob/master/application/config/database.php
$active_group = 'sqlite'; $query_builder = TRUE; $db['sqlite'] = array( 'dsn' => 'sqlite:'.APPPATH.'sqlite/db1.sqlite', 'hostname' => '', 'username' => '', 'password' => '', 'database' => '', 'dbdriver' => 'pdo', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'autoinit' => TRUE, 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
・表の作成例
CREATE TABLE tasks( id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR(255) NOT NULL, content TEXT, uid INTEGER, up_date TIMESTAMP );
・index
https://github.com/kuc-arc-f/code-2_ver1/blob/master/application/views/tasks/index.php
var baseUrl = '<?php echo base_url(); ?>'; var app = new Vue({ el: '#app', created() { this.getTasks() }, data: { tasks : [], }, methods: { getTasks() { var url = this.conv_url('api/tasks') axios.get(url) .then(res => { this.tasks = res.data console.log(res.data.length ) }) }, conv_url(url) { return baseUrl + url } } });
・create
https://github.com/kuc-arc-f/code-2_ver1/blob/master/application/views/tasks/create.php
登録系は、jQuery 使いました。 axios でエラー回避が困難でしたので。。
var baseUrl = '<?php echo base_url(); ?>'; console.log(baseUrl); function test_ajax(){ console.log('#btn-1'); var hostUrl= baseUrl + 'api/tasks/create'; var title = $('#title').val(); var content = $('#content').val(); $.ajax({ url: hostUrl, type:'POST', dataType: 'json', data : { 'title' : title, 'content' : content}, timeout:3000, }).done(function(data) { console.log("ajax-ok"); console.log(data); }).fail(function(XMLHttpRequest, textStatus, errorThrown) { console.log("ajax-error"); }) }
・ルーティング
https://github.com/kuc-arc-f/code-2_ver1/blob/master/application/config/routes.php
$route['tasks/edit/(:any)'] = 'tasks/edit/$1'; $route['tasks/show/(:any)'] = 'tasks/view/$1'; $route['tasks/create'] = 'tasks/create'; $route['tasks/(:any)'] = 'tasks/view/$1'; $route['tasks'] = 'tasks'; $route['api/tasks/create'] = 'tasks/api_create'; $route['api/tasks'] = 'tasks/api_index';
Vue.js (Vue CLI 3) bootstrapの追加 SPA開発(10) #Vue.js #web #firebase #SPA
index:
概要:
前のSPA(SinglePageApplication) 関連で、
bootstrap 4.0のCSS 追加内容です
環境
Vue-CLI 3.6.6
Vue.js
vue-router
firebase
bootstrap 4.0
実装など
https://github.com/kuc-arc-f/vue_2_ver3/blob/master/public/index.html
cdn追加のみですが。
・index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <title>vue_2</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <!----> </head> <body> <noscript> <strong>We're sorry but vue_2 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong> </noscript> <div id="app"></div> <!-- built files will be auto injected --> </body> </html>
画面
一覧の例となります。
少し見た目は、よくなりました