構成設定

Posted by muchag | CakePHP 4.x |
初回投稿:2019-11-17 (日) 14:40:09 | 最終更新:2019-11-24 (日) 13:58:41


公式:構成設定

【環境】
CakePHP: 4.0.0-RC1
初期設定

CakePHP3 の
初期設定
構成設定
も参照。

app.php
CakePHP3 差分
/config/app.php

こちらは、アプリケーション設定のファイル。

CakePHP4 では、

/config/app_local.php

が追加されている。

.gitignore

そして、.gitignore の記述が、CakePHP3 と比べて


- /config/app.php
+ /config/app_local.php

のように変更されている。

結論

環境に依存しない設定を

/config/app.php

環境に依存する設定を

/config/app_local.php

へ、記述するルールみたい。

その他
/config/app_local.example.php

も追加されていた。

作業
データベース
/config/app_local.php

'Datasources' => [
    'default' => [
        'host' => 'localhost',
        /*
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
         * the following line and set the port accordingly
         */
        //'port' => 'non_standard_port_number',

        'username' => 'my_app',
        'password' => 'secret',

        'database' => 'my_app',
        /**
         * If not using the default 'public' schema with the PostgreSQL driver
         * set it here.
         */
        //'schema' => 'myapp',

        /**
         * You can use a DSN string to set the entire configuration
         */
        'url' => env('DATABASE_URL', null),
    ],

    /*
     * The test connection is used during the test suite.
     */
    'test' => [
        'host' => 'localhost',
        //'port' => 'non_standard_port_number',
        'username' => 'my_app',
        'password' => 'secret',
        'database' => 'test_myapp',
        //'schema' => 'myapp',
    ],
],

本体とテストそれぞれの、
データベースホスト、ユーザ名、パスワード、データベース名を設定。

PostgreSQL

今回は、CakePHP4 デフォルトの MySQL ではなく
PostgreSQL を利用するので


'driver' => 'Cake\Database\Driver\Postgres',

こちらも、本体とテストのそれぞれに追記。

.env
CakePHP3 差分
その他
/config/.env.example

が追加されていた。

作業
bootstrap.php
/config/bootstrap.php

// if (!env('APP_NAME') && file_exists(CONFIG . '.env')) {
//     $dotenv = new \josegonzalez\Dotenv\Loader([CONFIG . '.env']);
//     $dotenv->parse()
//         ->putenv()
//         ->toEnv()
//         ->toServer();
// }

このコメントアウトを復帰。

.env.example
/config/.env.example

こちらに基づいて、

/config/.env

を作成。


export APP_NAME="__APP_NAME__"
export DEBUG="true"
export APP_ENCODING="UTF-8"
export APP_DEFAULT_LOCALE="en_US"
export APP_DEFAULT_TIMEZONE="UTC"
export SECURITY_SALT="__SALT__"
  • アプリ名:任意
  • ロケール:ja_JP
  • タイムゾーン:Asia/Tokyo
  • ソルト:ランダム
Posted by muchag | CakePHP 4.x |
初回投稿:2019-11-17 (日) 14:40:09 | 最終更新:2019-11-24 (日) 13:58:41

インストール -> 4.0.0-RC1

Posted by muchag | CakePHP 4.x |
初回投稿:2019-11-17 (日) 13:35:21 | 最終更新:2019-11-17 (日) 13:35:21


公式:インストール

【環境】
CakePHP: 4.0.0-RC1
システム要件

公式には

  • HTTP サーバー。例: Apache。mod_rewrite が推奨されますが、必須ではありません。
  • PHP 7.2.0 以上 (PHP 7.2 も含む)
    • mbstring PHP 拡張
    • intl PHP 拡張
    • simplexml PHP 拡張
  • データベース
    • MySQL (5.5.3 以上)
    • MariaDB (5.5 以上)
    • PostgreSQL
    • Microsoft SQL Server (2008 以上)
    • SQLite 3

と書かれているけど
まだドキュメントを更新し始めたばかりみたいなので
変わる可能性があるかも?

インストール

まだ正式リリースを迎えていないので
おまけ付きでインストール。


composer create-project --prefer-dist cakephp/app:4.x-dev /media/sf_CakeTest
Posted by muchag | CakePHP 4.x |
初回投稿:2019-11-17 (日) 13:35:21 | 最終更新:2019-11-17 (日) 13:35:21

スクリプト実行

Posted by muchag | Google Apps Script |
初回投稿:2019-11-17 (日) 10:45:17 | 最終更新:2019-11-17 (日) 10:47:05

スクリプトを実行する方法は
いくつかある。

【環境】
GAS: November 6, 2019
スクリプトエディタ

スクリプトエディタのツールボタン [関数を選択]-[(対象の関数名)] [(再生ボタン)] または Ctrl + R

ボタン
[挿入] から、画像なりテキストなりを配置して
そこへ関数を登録して、ボタンとして利用する。

ただし、ドキュメントでは、文章中にボタンが配置されてしまうので
うまく扱えなかった。

メニュー

function onOpen() {
  var ui = DocumentApp.getUi();
  var menu = ui.createMenu('スクリプトメニュー');
  menu.addItem('リスト変換', 'main');
  menu.addToUi();
}

onOpen メソッドで、当該ドライブファイルを開いたときのイベントハンドラとして
リスト追加スクリプトを記述する。

  • スプレットシート:SpreadsheetApp
  • スライド:SlideApp(かな? 未調査)
  • ドキュメント:DocumentApp
参考サイト

iwb.jp:Googleスプレッドシート Apps Scriptの3つのプログラム実行方法(2018-01-22)

Posted by muchag | Google Apps Script |
初回投稿:2019-11-17 (日) 10:45:17 | 最終更新:2019-11-17 (日) 10:47:05

MySQL

Posted by muchag | Java,MySQL |
初回投稿:2019-11-05 (火) 22:15:47 | 最終更新:2019-11-06 (水) 19:36:04


GitHub:nkjmlab/nkjmlab-utils-jpdatum

【環境】
MySQL: 8.0.18
Eclipse:Pleiades All in One JAVA 2019-09 R (4.13.0)
Java: 1.8.0_221
ドライバ
入手先
MySQL 公式

あちこちの記事で、ドライバの入手先として
公式:MySQL Community Downloads Connector/J
を挙げていたけど、どうやって DL してよいのかわからなかった。

同ページに、Recommended Windows Download: と書いてあるから
MySQL インストールディレクトリに同梱されているのかと思ったけど
エクスプローラで、mysql-connector-java で検索してみたものの、ヒットせず。

Maven Repository

仕方がないので
Maven Repository:MySQL Connector/J 8.0.18
こちらの、Files:jar (2.2MB) から DL した。

2019-11-05 現在
mysql-connector-java-8.0.18.jar

配置&参照
[project]\WebContent\WEB-INF\lib\mysql-connector-java-8.0.18.jar

として配置。

ビルド・パス の設定。

接続

数多くサンプルがある中、下記が見やすかったので
不要な部分を削除して、そのままいただきました。
TASK NOTES:JavaでMySQLに接続してデータ操作をする(2015-04-14)


import java.sql.*;

public class MySQLConnector {
    public static void main(String[] args) {
        Connection con = null;
        try {
            // MySQLに接続
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
            System.out.println("MySQLに接続できました。");
        } catch (SQLException e) {
            System.out.println("MySQLに接続できませんでした。");
        } finally {
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.out.println("MySQLのクローズに失敗しました。");
                }
            }
        }
    }
}
取得

Statement stm = con.createStatement();
String sql = "select * from programing";
ResultSet rs = stm.executeQuery(sql);

while(rs.next()){
    int id = rs.getInt("id");
    String name = rs.getString("name");
    System.out.println("取得結果 -> " + id + ":" + name);
}
更新

Statement stm = con.createStatement();
String sql = "insert into programing values(4, 'Python'), (5, 'Go')";
int result = stm.executeUpdate(sql);
System.out.println("更新件数は" + result + "です。");
参考サイト

TASK NOTES:JavaでMySQLに接続してデータ操作をする(2015-04-14)
→とても見やすく、コードは、ほぼそのまま真似させていただきました。

Posted by muchag | Java,MySQL |
初回投稿:2019-11-05 (火) 22:15:47 | 最終更新:2019-11-06 (水) 19:36:04

‘COM 参照可能なマネージ クラス ‘ComboBoxUiaProvider’ のクラス インターフェイスを要求する…

Posted by muchag | C# |
初回投稿:2019-09-23 (月) 18:45:30 | 最終更新:2019-09-24 (火) 13:04:41

コンストラクタをクラス名と同じにしたら
エラーになって焦った。

【環境】
C#: 8.0
Visual Studio: 16.2.5(2019C)
エラー

ComboBox へ DataSource を設定していたら、下記エラーメッセージと遭遇した。

マネージド デバッグ アシスタント ‘NonComVisibleBaseClass’ :
‘COM 参照可能なマネージ クラス ‘ComboBoxUiaProvider’ のクラス インターフェイスを要求する QueryInterface 呼び出しが行われましたが、
このクラスは COM 参照可能ではないクラス ‘ComboBoxExAccessibleObject’ から派生しているため、
QueryInterface は失敗します。
これは、COM 参照可能ではない基本クラスが COM バージョン管理規則によって制約されるのを防ぐためです。’
状況
Visual Studio

Visual Studio からは、「例外がスローされました」というメッセージを受け取ったけど
Exception の種類は不明。

try .. catch で、Exception を拾おうとしても、拾えない。

ロジック

コンボボックスの選択肢が、ユーザの操作状況によって変化するので
その度に、ComboBox.DataSource を設定し直す、というもの。


ComboBox1.DataSource = Items; // ここで例外
ComboBox1.DisplayMember = "ItemDisp";
ComboBox1.ValueMember = "ItemValue";

同じコードで DataSource を変更している
他の ComboBox ではこれで問題ないのに、ここだけ上記エラーとなる。

原因

nonComVisibleBaseClass MDA

解決?

原因は、上記なんだろうけど、
どうしていいかわからないので
デバッグ最中に出てくる
画面右下のペイン [例外設定] にて
[Managed Debugging Assistants]-[NonComVisibleBaseClass] のチェックを外した。

Posted by muchag | C# |
初回投稿:2019-09-23 (月) 18:45:30 | 最終更新:2019-09-24 (火) 13:04:41

Laravel Mix -> Hackers Galore 様編

Posted by muchag | CakePHP 3.x,Library & PlugIn & AddIn,困ったTT |
初回投稿:2018-12-07 (金) 13:31:02 | 最終更新:2018-12-11 (火) 23:13:04

【環境】
CakePHP: 3.6.5
php: 7.3.0 rc6
手順
シンボリックリンク問題対応

シンボリックリンク権限問題 解決のために
シンボリックリンクを作成。


mkdir /media/sf_CakeTest/node_modules
mkdir /var/CakeTest
mkdir /var/CakeTest/node_modules
mount --bind /var/CakeTest/node_modules /media/sf_CakeTest/node_modules
package.json 配置

https://github.com/laravel/laravel/blob/master/package.json
を CakePHP3 のルートディレクトリへ配置。

webroot 内に配置しないように。

私は、直接 Laravel 5.7.15 からコピペした。

インストール

cd /media/sf_CakeTest
yarn install
imagemin

imagemin についての警告が出るので、インストール。


warning "laravel-mix > img-loader@3.0.1" has unmet peer dependency "imagemin@^5.0.0 || ^6.0.0".

こちらを解決するために、imagemin をインストール。


yarn add -D imagemin
yarn add v1.12.3
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
success Saved 14 new dependencies.
info Direct dependencies
└─ imagemin@6.0.0
info All dependencies
├─ @mrmlnc/readdir-enhanced@2.2.1
├─ @nodelib/fs.stat@1.1.3
├─ arrify@1.0.1
├─ call-me-maybe@1.0.1
├─ dir-glob@2.0.0
├─ fast-glob@2.2.4
├─ file-type@8.1.0
├─ glob-to-regexp@0.3.0
├─ globby@8.0.1
├─ ignore@3.3.10
├─ imagemin@6.0.0
├─ merge2@1.2.3
├─ p-pipe@1.2.0
└─ replace-ext@1.0.0
Done in 9.96s.
webpack.mix.js 配置

https://github.com/laravel/laravel/blob/master/webpack.mix.js
を CakePHP3 のルートディレクトリへ配置。

私は、直接 Laravel 5.7.15 からコピペした。

assets ディレクトリ配置
/assets/js/app.js
/assets/sass/app.sass

を配置。

私は、直接 Laravel 5.7.15 からコピペした。

webpack.mix.js 修正

参考サイトのものを基に、自分の環境に合わせて改変。

/webpack.mix.js

mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css');


mix.setPublicPath('webroot'); // since not in Laravel, need to help Mix along here
mix.js('assets/js/app.js', 'webroot/js')
.sass('assets/sass/app.scss', '../assets/build/css')
.sass('assets/sass/self.scss', '../assets/build/css')
.styles([
    'assets/build/css/app.css',
    'assets/build/css/self.css'
    ], 'webroot/css/app.css');
テストコード

参考サイトにはテストコードを記述する件があるけど
Laravel からコピペしてきた、ExampleComponent.vue があるので
テストコードはスキップ。

組み込み
/src/Template/Pages/home.ctp

header 閉じタグ直後に3行追加。


body 閉じタグ直前に2行追加。


webpack 始動

npm run watch

 DONE  Compiled successfully in 8082ms                                                                                                                                                                                                                                                                               15:57:56
                                                                                                                                                                                                                                                                                                                       Asset     Size  Chunks                    Chunk Names
  /js/app.js  1.38 MB       0  [emitted]  [big]  /js/app
/css/app.css   198 kB       0  [emitted]         /js/app
表示確認

CakePHP3 のロゴ黒帯下に

Example Component
I’m an example component.

と、ExampleComponent.vue の内容が表示された。

やた~!!

ところが・・・

その後の使い方で 困ったこと が・・・。

webpack.mix.js において
ファイル統合をしようとすると
表示時にデベロッパーツールのコンソールへ謎のエラー、
というか、
コンパイル後の app.js へ、謎の追記がされる。

stack overflow:Uncaught SyntaxError: Invalid or unexpected token in file compiled by Browserify(2016-06-10)
こちらと同じ症状っぽいんだけど、
上記は Elixir 時代のものだし、提示されている方法が Nginx のもので
私の環境は Apache なので、どうしてよいかわからずじまい。

webpack.mix.js

mix.setPublicPath('webroot'); // since not in Laravel, need to help Mix along here
mix.js('resources/assets/js/app.js', 'webroot/js')
.sass('resources/assets/sass/app.scss', 'webroot/css');

これだと問題ないけど


mix.setPublicPath('webroot'); // since not in Laravel, need to help Mix along here
mix.js('assets/js/app.js', 'webroot/js')
.sass('assets/sass/app.scss', '../assets/build/css')
.sass('assets/sass/self.scss', '../assets/build/css')
.styles([
    'assets/build/css/app.css',
    'assets/build/css/self.css'
    ], 'webroot/css/app.css');

これだと
コンパイルは無事に通り、ファイルも生成されるけど
Uncaught SyntaxError: Invalid or unexpected token となり
デベロッパーツール上では、app.js に ******************************************** な感じのが表示される。
コンパイル後の app.js ファイルを直接見てもそんな記述はないけど。。。

わかる方がいらしたら、ぜひ情報をください。

試行錯誤
yarn install

yarn install --no-bin-links
yarn install v1.12.3
info No lockfile found.
[1/4] Resolving packages...
warning laravel-mix > autoprefixer > browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning laravel-mix > css-loader > cssnano > autoprefixer > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning laravel-mix > css-loader > cssnano > postcss-merge-rules > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning laravel-mix > css-loader > cssnano > postcss-merge-rules > caniuse-api > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
[2/4] Fetching packages...
info fsevents@1.2.4: The platform "linux" is incompatible with this module.
info "fsevents@1.2.4" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning "laravel-mix > img-loader@3.0.1" has unmet peer dependency "imagemin@^5.0.0 || ^6.0.0".
[4/4] Building fresh packages...
success Saved lockfile.
Done in 120.15s.
解決1

warning laravel-mix > autoprefixer > browserslist@2.11.3: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning laravel-mix > css-loader > cssnano > autoprefixer > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning laravel-mix > css-loader > cssnano > postcss-merge-rules > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.
warning laravel-mix > css-loader > cssnano > postcss-merge-rules > caniuse-api > browserslist@1.7.7: Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.

こちらの4行を解決するために

/package.json

へ、下記3行を追記。


"browserslist": [
    "> 1%",
    "last 2 versions"
],

と思ったけど、これでは解決しない。

解決2

こちらは、yarn install 前にはできないので
下記警告が出てから対処。


warning "laravel-mix > img-loader@3.0.1" has unmet peer dependency "imagemin@^5.0.0 || ^6.0.0".

こちらを解決するために、imagemin をインストール。


yarn add -D imagemin
npm run watch1

起動してみると


npm run watch

__ snip __

sh: cross-env: コマンドが見つかりません

と怒られた。

解決

teratail:npm run watch時に「sh: 1: cross-env: not found」のエラー発生(2018-04-05)
を参考にして、package.json を、下記の通り編集。

/package.json

{
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "npm run development -- --watch",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
}


{
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "npm run development -- --watch",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
}
npm run watch2

再び、webpack を起動してみると


npm run watch

__ snip __

These dependencies were not found:

* /media/sf_CakeTest/resources/assets/js/app.js in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
* /media/sf_CakeTest/resources/assets/sass/app.scss in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
解決

これは、resources ディレクトリを Laravel からコピペしたため
assets ディレクトリを配置し忘れていた。

npm run watch3

再び、webpack を起動してみると


npm run watch

__ snip __

 error  in ./resources/assets/sass/app.scss

Module build failed: Error: ENOENT: no such file or directory, scandir '/media/sf_CakeTest/node_modules/node-sass/vendor'
npm rebuild node-sass

Qiita:EC2環境でLaravelのセットアップ中にnode-sassのvenderディレクトリが見つからないと言われたときの対処法(2016-07-21)
を参考に npm rebuild node-sass してみた。


npm rebuild node-sass
npm ERR! path ../node-sass/bin/node-sass
npm ERR! code EROFS
npm ERR! errno -30
npm ERR! syscall symlink
npm ERR! rofs EROFS: read-only file system, symlink '../node-sass/bin/node-sass' -> '/media/sf_CakeTest/node_modules/.bin/node-sass'
npm ERR! rofs Often virtualized file systems, or other file systems
npm ERR! rofs that don't support symlinks, give this error.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-12-07T05_28_07_044Z-debug.log
シンボリックリンク権限問題

件の シンボリックリンク権限問題 が出たので


mkdir /var/CakeTest
mkdir /var/CakeTest/node_modules
mount --bind /var/CakeTest/node_modules /media/sf_CakeTest/node_modules
npm rebuild node-sass再

で、もっかい


npm rebuild node-sass

> node-sass@4.10.0 install /media/sf_CakeTest/node_modules/node-sass
> node scripts/install.js

node-sass build Binary found at /media/sf_CakeTest/node_modules/node-sass/vendor/linux-x64-57/binding.node

> node-sass@4.10.0 postinstall /media/sf_CakeTest/node_modules/node-sass
> node scripts/build.js

Binary found at /media/sf_CakeTest/node_modules/node-sass/vendor/linux-x64-57/binding.node
Testing binary
Binary is fine
node-sass@4.10.0 /media/sf_CakeTest/node_modules/node-sass

それでも vendor ディレクトリは生成されなかった。

npm install node-sass@3.7.0

そこで、
stack overflow:Error: ENOENT: no such file or directory, scandir
に載っていた


npm install node-sass@3.7.0

を実行してみると
大量のログが出たけど
vendor ディレクトリは生成されなかった。

解決?

ここで試しに webpack を起動。


npm run dev

すると、コンパイル完了。

どの時点で、不具合が解消されたか不明。
次回試行まだお預け。

予想

npm rebuild node-sass

こちらで入ってきた node-sass は 4.10.0

そして、3.7.0 を入れたらうまくいったので
4.10.0 の不具合?

参考サイト

Hackers Galore:Using Laravel Mix with CakePHP 3(2018-04-29)

ログ
sh: cross-env: コマンドが見つかりません

npm run watch

> @ watch /media/sf_CakeTest
> npm run development -- --watch


> @ development /media/sf_CakeTest
> cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--watch"

sh: cross-env: コマンドが見つかりません
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! @ development: `cross-env NODE_ENV=development node_modules/webpack/bin
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the @ development script.
npm ERR! This is probably not a problem with npm. There is likely additional log

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-12-07T04_27_40_334Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ watch: `npm run development -- --watch`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ watch script.
npm ERR! This is probably not a problem with npm. There is likely additional log

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2018-12-07T04_27_40_345Z-debug.log
ERROR in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss

npm run watch

ERROR  Failed to compile with 2 errors                                                                                                                                                                                                                                                                              14:16:59

These dependencies were not found:

* /media/sf_CakeTest/resources/assets/js/app.js in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
* /media/sf_CakeTest/resources/assets/sass/app.scss in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss

To install them, you can run: npm install --save /media/sf_CakeTest/resources/assets/js/app.js /media/sf_CakeTest/resources/assets/sass/app.scss                                                                                                                                                                     Asset     Size  Chunks             Chunk Names
/js/app.js  2.76 kB       0  [emitted]  /js/app

ERROR in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
Module not found: Error: Can't resolve '/media/sf_CakeTest/resources/assets/js/app.js' in '/media/sf_CakeTest'
 @ multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss

ERROR in multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
Module not found: Error: Can't resolve '/media/sf_CakeTest/resources/assets/sass/app.scss' in '/media/sf_CakeTest'
 @ multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
Module build failed: Error: ENOENT: no such file or directory, scandir ‘/media/sf_CakeTest/node_modules/node-sass/vendor’

npm run watch

> @ watch /media/sf_CakeTest
> npm run development -- --watch


> @ development /media/sf_CakeTest
> node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--watch"

 10% building modules 1/1 modules 0 active
Webpack is watching the files…
                                                                                                                                                                                                                                                                                    95% emitting                             
 ERROR  Failed to compile with 2 errors                                                                                                                                                                                                                                                                              14:25:46

 error  in ./resources/assets/sass/app.scss

Module build failed: Error: ENOENT: no such file or directory, scandir '/media/sf_CakeTest/node_modules/node-sass/vendor'
    at Object.fs.readdirSync (fs.js:904:18)
    at Object.getInstalledBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/extensions.js:130:13)
    at foundBinariesList (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:20:15)
    at foundBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:15:5)
    at Object.module.exports.missingBinary (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:45:5)
    at module.exports (/media/sf_CakeTest/node_modules/node-sass/lib/binding.js:15:30)
    at Object. (/media/sf_CakeTest/node_modules/node-sass/lib/index.js:14:35)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object. (/media/sf_CakeTest/node_modules/sass-loader/lib/loader.js:3:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:13:17)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18

 @ ./resources/assets/sass/app.scss 4:14-266
 @ multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss

 error  in ./resources/assets/sass/app.scss

Module build failed: ModuleBuildError: Module build failed: Error: ENOENT: no such file or directory, scandir '/media/sf_CakeTest/node_modules/node-sass/vendor'
    at Object.fs.readdirSync (fs.js:904:18)
    at Object.getInstalledBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/extensions.js:130:13)
    at foundBinariesList (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:20:15)
    at foundBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:15:5)
    at Object.module.exports.missingBinary (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:45:5)
    at module.exports (/media/sf_CakeTest/node_modules/node-sass/lib/binding.js:15:30)
    at Object. (/media/sf_CakeTest/node_modules/node-sass/lib/index.js:14:35)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object. (/media/sf_CakeTest/node_modules/sass-loader/lib/loader.js:3:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:13:17)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at runLoaders (/media/sf_CakeTest/node_modules/webpack/lib/NormalModule.js:195:19)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:364:11
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:170:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:27:11)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at runLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:362:2)
    at NormalModule.doBuild (/media/sf_CakeTest/node_modules/webpack/lib/NormalModule.js:182:3)
    at NormalModule.build (/media/sf_CakeTest/node_modules/webpack/lib/NormalModule.js:275:15)
    at Compilation.buildModule (/media/sf_CakeTest/node_modules/webpack/lib/Compilation.js:157:10)
    at moduleFactory.create (/media/sf_CakeTest/node_modules/webpack/lib/Compilation.js:460:10)
    at factory (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:243:5)
    at applyPluginsAsyncWaterfall (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:94:13)
    at /media/sf_CakeTest/node_modules/tapable/lib/Tapable.js:268:11
    at NormalModuleFactory.params.normalModuleFactory.plugin (/media/sf_CakeTest/node_modules/webpack/lib/CompatibilityPlugin.js:52:5)
    at NormalModuleFactory.applyPluginsAsyncWaterfall (/media/sf_CakeTest/node_modules/tapable/lib/Tapable.js:272:13)
    at resolver (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:69:10)
    at process.nextTick (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:196:7)
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
                                                                                                                                                                                                                                                                                                                     Asset     Size  Chunks                    Chunk Names
/js/app.js  1.39 MB       0  [emitted]  [big]  /js/app

ERROR in ./node_modules/css-loader??ref--5-2!./node_modules/postcss-loader/lib??postcss!./node_modules/resolve-url-loader??ref--5-4!./node_modules/sass-loader/lib/loader.js??ref--5-5!./resources/assets/sass/app.scss
Module build failed: Error: ENOENT: no such file or directory, scandir '/media/sf_CakeTest/node_modules/node-sass/vendor'
    at Object.fs.readdirSync (fs.js:904:18)
    at Object.getInstalledBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/extensions.js:130:13)
    at foundBinariesList (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:20:15)
    at foundBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:15:5)
    at Object.module.exports.missingBinary (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:45:5)
    at module.exports (/media/sf_CakeTest/node_modules/node-sass/lib/binding.js:15:30)
    at Object. (/media/sf_CakeTest/node_modules/node-sass/lib/index.js:14:35)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object. (/media/sf_CakeTest/node_modules/sass-loader/lib/loader.js:3:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:13:17)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
 @ ./resources/assets/sass/app.scss 4:14-266
 @ multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss

ERROR in ./resources/assets/sass/app.scss
Module build failed: ModuleBuildError: Module build failed: Error: ENOENT: no such file or directory, scandir '/media/sf_CakeTest/node_modules/node-sass/vendor'
    at Object.fs.readdirSync (fs.js:904:18)
    at Object.getInstalledBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/extensions.js:130:13)
    at foundBinariesList (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:20:15)
    at foundBinaries (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:15:5)
    at Object.module.exports.missingBinary (/media/sf_CakeTest/node_modules/node-sass/lib/errors.js:45:5)
    at module.exports (/media/sf_CakeTest/node_modules/node-sass/lib/binding.js:15:30)
    at Object. (/media/sf_CakeTest/node_modules/node-sass/lib/index.js:14:35)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object. (/media/sf_CakeTest/node_modules/sass-loader/lib/loader.js:3:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:13:17)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at runLoaders (/media/sf_CakeTest/node_modules/webpack/lib/NormalModule.js:195:19)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:364:11
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:170:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:27:11)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:173:18
    at loadLoader (/media/sf_CakeTest/node_modules/loader-runner/lib/loadLoader.js:36:3)
    at iteratePitchingLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at runLoaders (/media/sf_CakeTest/node_modules/loader-runner/lib/LoaderRunner.js:362:2)
    at NormalModule.doBuild (/media/sf_CakeTest/node_modules/webpack/lib/NormalModule.js:182:3)
    at NormalModule.build (/media/sf_CakeTest/node_modules/webpack/lib/NormalModule.js:275:15)
    at Compilation.buildModule (/media/sf_CakeTest/node_modules/webpack/lib/Compilation.js:157:10)
    at moduleFactory.create (/media/sf_CakeTest/node_modules/webpack/lib/Compilation.js:460:10)
    at factory (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:243:5)
    at applyPluginsAsyncWaterfall (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:94:13)
    at /media/sf_CakeTest/node_modules/tapable/lib/Tapable.js:268:11
    at NormalModuleFactory.params.normalModuleFactory.plugin (/media/sf_CakeTest/node_modules/webpack/lib/CompatibilityPlugin.js:52:5)
    at NormalModuleFactory.applyPluginsAsyncWaterfall (/media/sf_CakeTest/node_modules/tapable/lib/Tapable.js:272:13)
    at resolver (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:69:10)
    at process.nextTick (/media/sf_CakeTest/node_modules/webpack/lib/NormalModuleFactory.js:196:7)
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
 @ ./resources/assets/sass/app.scss
 @ multi ./resources/assets/js/app.js ./resources/assets/sass/app.scss
Posted by muchag | CakePHP 3.x,Library & PlugIn & AddIn,困ったTT |
初回投稿:2018-12-07 (金) 13:31:02 | 最終更新:2018-12-11 (火) 23:13:04

依存注入とコントローラ

Posted by muchag | Laravel 5.x |
初回投稿:2018-12-05 (水) 23:21:46 | 最終更新:2018-12-05 (水) 23:45:06


公式:コントローラ 依存注入とコントローラ

【環境】
Laravel: 5.7.15
コンストラクターインジェクション

コンストラクタにおいて依存注入を果たす。

コントローラ全体で利用する、できる。


namespace App\Http\Controllers;

use App\Repositories\UserRepository;

class UserController extends Controller
{
    /**
     * ユーザーリポジトリインスタンス
     */
    protected $users;

    /**
     * 新しいコントローラインスタンスの生成
     *
     * @param  UserRepository  $users
     * @return void
     */
    public function __construct(UserRepository $users)
    {
        $this->users = $users;
    }
}
メソッドインジェクション

アクションにおいて依存注入を果たす。

アクション(メソッド)ローカルで利用する、できる。


namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * 新ユーザーの保存
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        $name = $request->name;

        //
    }
}
暗黙の結合

delete アクションにおいて、すごい暗黙ルールがあった。

下記のようにルーティングすると


Route::delete('/task/{task}', function (Task $task) {
  $task->delete();

  return redirect('/');
});

パラメータ task.id から、該当する Task モデル(エンティティ)を
自動で取得してくるらしい。

{task}と$taskの名前が一致している場合には「暗黙の結合」という機能によって、
自動的に{task}のidを持つタスクが読み込まれ $taskに代入されます。
もし一致するidが見つからない場合は、404ページが生成されます。

beizのノート:Laravel 5.5 入門として「基本のタスクリスト」を作成する [その3](2018-11-01)
タスクのデータベースからの削除

すごいけど、ねぇ。。。

delete でなくても、反応しそう。

あ、これはコントローラの話じゃないか。

ルーティングの勉強をするときに移動。

Posted by muchag | Laravel 5.x |
初回投稿:2018-12-05 (水) 23:21:46 | 最終更新:2018-12-05 (水) 23:45:06

コマンド実行

Posted by muchag | PHP |
初回投稿:2018-05-18 (金) 23:53:31 | 最終更新:2018-05-19 (土) 0:02:14

php からサーバコマンドを実行する方法。

公式:execsystem

概要

php からサーバコマンドを実行するには
exec と system の2つの関数が用意されている。

二者の違いは、出力を返すか返さないかみたいだけど
引数指定次第でどちらも出力を返すみたいなので
結果的には、同じ働きなのかしらね~。

書式
exec

string exec ( string $command [, array &$output [, int &$return_var ]] )

第1引数:コマンド文字列
第2引数:出力格納用変数。省略可。省略すると出力を受け取れない
第3引数:コマンド実行結果ステータス格納用変数。省略可。省略するとステータスを受け取れない

system

string system ( string $command [, int &$return_var ] )

第1引数:コマンド文字列
第2引数:コマンド実行結果ステータス格納用変数。省略可。省略するとステータスを受け取れない

非同期処理

どちらもコマンド文字列に「 > /dev/null &」と付記してやることで、非同期に処理を実行できる。

注意:

プログラムがこの関数で始まる場合、 バックグラウンドで処理を続けさせるには、
プログラムの出力をファイルや別の出力ストリームにリダイレクトする必要があります。
そうしないと、プログラムが実行を終えるまで PHP はハングしてしまいます。

どうやら、上記付記内容は、出力をリダイレクトさせるものらしい。

参考サイト

SAMURAI:【PHP入門】外部コマンドの実行(exec)とコマンドライン実行の方法(2017-10-16)

Posted by muchag | PHP |
初回投稿:2018-05-18 (金) 23:53:31 | 最終更新:2018-05-19 (土) 0:02:14

phpDocumentor

Posted by muchag | PHP |
初回投稿:2018-04-11 (水) 15:52:58 | 最終更新:2018-04-11 (水) 16:25:09

個人で開発をしていると、こういうチームワーク的な手法に手が回らない。
実感が湧かないからね。。。

公式?:phpDocumentor

アノテーション
@property

公式?:@property
メンバ変数の型宣言をできる。

php では、メンバ変数を宣言する際に、型宣言を伴わない。
そのせいで phpStrom では、警告が出るらしい。

User.php

class User
{
    private $name;

    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;
    }
}

この User クラスをメンバ変数 $leader へ代入すると
$leader が何者か不明なために、User クラス内メソッドを利用する際に警告となるらしい。

そこで、下記のように @property アノテーションで定義してやることで
理解してもらえるそうな。

ちなみに、複数管理するメンバ変数には、User[] という他言語タイプで伝えるとよいらしい。


/**
 * Class Group
 *
 * @property User $leader
 * @property User[] $leaders <- array ではなく User[]
 */
class Group
{
    private $leader;
    private $leaders = [];
}
@method

公式?:@method
findX のようなマジックメソッド利用時に用いる。
※マジックメソッドは、そんなメソッドは存在しないんだけど
メソッド名からフレームワーク側が解析して、処理してくれるメソッド?


/**
 * Class SampleModel
 *
 * @method array findById($id, $fields = null)
 */
class SampleModel extends AppModel
{

このように明記してやることができる。

@uses, @used-by

メソッド名を動的に生成する場合に用いる。
要は、当該メソッドがどこからも呼ばれていないと思われるのを避ける。

公式?:@uses & @used-by


class Hoge
{
    /**
     * @uses addUser(), addAdmin()
     */
    public function addMember($user, $user_type)
    {
        $method = sprintf('add%s', $user_type);
        $this->{$method}($user); // $user_type に合ったメソッドを呼ぶ
    }

    /**
     * @used-by addMember
     */
    private function addUser($user)
    {
    }

    /**
     * @used-by addMember
     */
    private function addAdmin($user)
    {
    }
}
@uses

@uses の呼び出し元に設定する。

@used-by

@uses の呼び出し先に設定する。

参考サイト

バシャログ。:PhpStorm の静的解析機能をさらに活用するための3つのアノテーション(2015-12-07)
→@property, @method, @uses について非常にわかりやすかった

Posted by muchag | PHP |
初回投稿:2018-04-11 (水) 15:52:58 | 最終更新:2018-04-11 (水) 16:25:09

NullReferenceException

Posted by muchag | C#,Library & PlugIn & AddIn |
初回投稿:2018-03-22 (木) 21:29:17 | 最終更新:2018-03-22 (木) 21:38:32

【環境】
NPOI: 2.3.0
Visual C#: 15.5.4(2017)
.NETFramework,Version: v4.6.1
経緯

ある日突然例外がスローされた。

System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。

見てみると、どうやら GetRow で失敗しているんだけど
何故か、22行目で突然失敗。

原因

CreateRow や CreateCell をしておらず
その行やセルが見つからない、ってことだったみたい。
stack overflow:NullReferenceException accessing Workbook Cells with NPOI(2016-10-23)

これが、一から作成してる Excel ファイルではなく
テンプレートファイルを用意していたので
ちょっと混乱した。

7行目から先は全て空白行なので
21行目も22行目もどちらも空白行なのに
22行目で突然エラー。

解決(邪道)

どうやら、21行目までは見た目空白行であっても
書式設定か何かがされていて、NPOI 側で既存と認識できていたみたい。

なので、100行目までフォント色を「自動」にしたら
例外にならなくなった。

本当は CreateRow や CreateCell をするのが正しい解決方法だと思うけど
今晩は時間がないので暫定で対応。

Posted by muchag | C#,Library & PlugIn & AddIn |
初回投稿:2018-03-22 (木) 21:29:17 | 最終更新:2018-03-22 (木) 21:38:32
次ページへ »