Page 2 of 38

PHPStormで、配列の記述フォーマットをarray()から[]ショート表記にする

PHPStormで、配列の記述フォーマットをarray()から[]ショート表記にする

環境設定で 強制的にショート表記に変更するにチェック

環境設定 > Editor > Code Style > PHP の Other タブで Array Declaration Style の Force showr declaration style にチェックする。

その後エディターで、ショートカット 「Cmd + Opt + L 」で変換されます。

環境設定パネル

環境設定パネル

CakePHP3のHasManyに動的にソートを適用する。

CakePHP3のHasManyに動的にソートを適用する。

注文(Orders) > 発注書(PurchaseOrders) > 業者(Supplier)がありました。
select条件2のみであればOrdersのHasManyで設定すればよいがselect条件1でエラーとなる。

select条件1:業者まで繋げない

Orders>PurchaseOrders

select条件2:業者まで繋げる。

Orders>PurchaseOrders>Suppliers

HasManyクラスのsetSort()を使う。

$this->Orders->PurchaseOrders->setSort(['Suppliers.name'=>'asc']);

で動的に設定できます。

すでに既存のSortが設定されている場合。

(バージョン 3.5.17にて確認)
ソースコードをみると、$this->_sortを上書きしているだけのセッターなので、そのまま上書きな感じでした。

/**
 * Sets the sort order in which target records should be returned.
 *
 * @param mixed $sort A find() compatible order clause
 * @return $this
 */
public function setSort($sort)
{
    $this->_sort = $sort;

    return $this;
}

沖縄からMacBookPro 2015 15インチをバッテリー交換に出した。

沖縄からMacBookPro 2015 15インチをバッテリー交換に出した。

MacbookProを約2年ちょっと使っていた頃、机の上で少しガタガタするようになった。よく見ると底面の中央が少し膨らんでいました。これは俗にいう妊娠(バッテリー膨張)で底面のアルミボディーが膨らんでしまっているみたい。

Apple 正規サービスプロバイダのカメラのキタムラ那覇新都心へ連絡。

問い合わせて機種を伝えたところ、預かっていったんリペアセンターへ郵送する必要があり、1周間ほどかかるとのこと。費用などについてもそこで調べてからとのことでした。

ちょっといろいろ時間もかかるし、大変だなぁと

Apple TELサポートへ連絡

もしてみる。AppleStoreの問い合わせから「起動または電源」を選んでTELを待つ。

Apple サポートへのお問い合わせ

しばらくして折返しの連絡があり、状況を説明する。(底面が膨らんできおり、ガタついている、キーボード、トラックパッド部分はいまのところ大丈夫) 購入日などを調べたところ、3年以内であり無償でバッテリーの交換が行えるということ。 また、

  • 正規プロバイダにもちこんでもリペアセンター送りになるのでこちらから修理を申し込んだほうが早く対応できるとのこと。

(うーん。。3年過ぎたら有償なの?? バッテリー寿命はともかく、アルミボディーの膨らみはせめて5年位は無償で対応してほしい。)

でも業務も止められないしいったん保留

メインマシンがないと業務的に厳しいので、いったん無償で期間もあと1年ほどは大丈夫なのでいったん修理は保留しました。

県内の修理業者や、個人での交換

さて、無償ではありますが、どうしても郵送などの時間がかかるとのこと。
で、自分でどうにかできないか、地元の修理業者さんではどうだろうと調べてみました。

  • 県内修理業者さんは2万ちょいで2–3日で対応できるとのこと。
  • バッテリーの交換キットは海外から取り寄せで1万少しはかかる。

といった感じでした。県内修理業者さんが早そうなのですが、無償でできるのに数万払うのでなんだか悔しい感じ、自分での交換はトラブルがあった場合が怖いなどから今回は基本Appleのサポートで行くことに。

なかなか合間もなく新しいマシンの購入を決意。

業務の合間で修理と考えてましたがなかなか合間がなく新しいマシン購入を検討。古い方のマシンが不用になるので、メルカリ/ヤフオクの相場を確認する。
まだ結構いい値段で売却できそうなので、6月のWWDCで新しい機種が出るかを確認して購入するタイミングを決めることとする。

2018.06のWWDCでの新しいMacbookPro発表はなし

事前情報で可能性が薄いと言われていたとおり、新しいものはなし。
発表直後にAppleStoreの整備済製品を漁っていたところ目当てのスペックのものが残っていたので、その場で発注。以下希望のスペックでしたら、USキーボードだけ断念。

  • ○15インチ
  • ○Corei7
  • ○SSD : 512GB
  • ○メモリ : 16GB
  • ○GPU : Radeon Pro 560
  • ☓キーボード : US

キーボードはほとんど外付け利用が多く、7万円近く安いので断念。
4Kディスプレイのマルチやクラムシェルモードがほとんどなので、GPUが希望通り4GBのRadeon Pro 560があってよかった。カラーはこだわらなかったがスペースグレイでした。

合計で27マソ近く、結構な出費。。。

旧マシンを修理に発送

ということで、再度Appleサポートへ問い合わせ。(土曜の早い時間で申込み後即TEL来ました。)
以前問い合わせていることと、聞いていることをざっくり説明し、本人確認etcの確認時効のみをすませて発送の依頼の話へで翌日の日曜のAMに受け取り依頼。

翌日(日曜)のAMのヤマトさんが受け取りに

やまとさんが宅急便PC用の箱を持ってきてくれるので、なにも準備せず筐体の電源だけを切って準備してお渡しするのみ。

翌々日(月曜) リペアセンターに到着、検査、部品発注中

翌日のAMにはリペアセンターに到着した旨のメールが着弾、お昼ごろに部品を発注したとの連絡がありました。(修理状況はAppleStoreのマイサポートで随時確認可能)

到着2日後修理状況(水曜)

Webで確認すると「修理状況を確認できません。」の表示、この前の状況が部品発注だったので対応中?なのかな。

到着2日後修理状況(水曜)

到着2日後修理状況(水曜)

到着2日後、修理完了して発送(水曜)

お昼頃に修理負えて発送しましたのメール着弾マイサポートページを確認すると発送済。になっておりました。

マイサポートページ

マイサポートページ

配送状況を確認すると、夕方にYAMATOへ荷物受付/発送/厚木ゲートウェイベース通過

配送状況

配送状況

修理/配送完了

リペアセンター到着の4日後自宅に配送到着しました。
TELでの予約してから、6日目で届きました。

土(問い合わせ),日(ヤマト集荷),月(到着/検査/部品発注中),火(部品発注中),水(発送),木(空輸中),金(到着)

修理報告書

で、一緒に修理報告書がついてました。

修理報告書

個人PCとかだと割と早い対応で問題ないのですが業務だと約1週間メインPCがない状態はちょっと厳しい感じですね。地元の修理屋さんの技術が良い所があればすこし費用がかさんでもお願いしても良いかもしれません。

今回はこのタイミングで買い替えいたしましたが、約2.5年利用してますので元の値段の半額程度でオークションなどで販売できればまぁそんなにマイナスではないと考えています。

東京とかだと3–4日でいけるのかなぁ。

QNAPのNASでTimeMachineがうまく設定できなかった(AFP)

QNAPのNASでTimeMachineがうまく設定できなかった(AFP)

設定でなんだかドハマリしてしまっていたので、いったんすべてリセットする方向で進めてできたので。
※あくまでうまく行ったケースとしてもメモ。不要な手順や不適切な部分ありましたらご了承ください。m(_ _)m

1. Mac側でQNAPとの接続を解除 
2. BackupStationのTime MachineのサポートをOFF
3. ControlPanel > Network & File Services > Win/Mac/NFS で、Apple NetworkingをOFF
4. ControlPanel > System > StrageManagerでディスクをフォーマット(EXT4)
5. ControlPanel > Network & File Services > Win/Mac/NFS で、Apple NetworkingをON
6. BackupStationのTime MachineのサポートをON (※たまにパスワードの設定がうまくいかない事があり、何度か設定したことがあった)
7. Mac側からQNAPに既存のユーザー("TimeMachine"でない)で、接続(smb::にてつなぎました。AFPでも良いのかも)
8. Mac側のシステム環境設定でディスクを選択、TimeMachineアカウントで接続(Connect)
9. 設定完了

ハマったときの現象や陥ったことなど

  • AFPでQNAPへ繋がらない
  • TimeMachineが見えない
  • SMBを使ってディレクトリごとでの設定と混同する
  • BackupStationのTimeMachineのパスワードがうまく反映されない

以上、自分用のメモ or なにかしら役に立てばです。

OSX High Sierraで、Parallels Desktop13 がアップデートできなかった。

検証のためParallels Desktopを起動しようとすると、アップデートきた、OK,OKアップデートしたらセキュリティー許可しろーと

ボタン押せないorz..

ボタン押せないorz..

※他のKarabinerとかQuickeyとかBetterTouchToolはセーフモードで起動してできたけど。Parallels自体がセーフモードで起動できなかったので。

で、FacebookからParallelsさんに問い合わせ、数分で反応具体的な方法をいただく。

Parallels desktopのinternational Gmbhの許可をMacからの権限所得失敗が発生してる問題となります。
■Parallels international Gmbhの許可に権限与えるための操作手順

※ご自身より難しいの場合は是非ともAppleのサポート窓口にご相談しながら、実施お願いいたします。
 Macのハイスキル操作となりますが、本窓口では情報詳しくお持ちではございませんが、ご理解いただければと存じます。

解決手順

1.リカバリモードで起動(Cmd+R)

2.言語選択を選ぶ > メニューからターミナル起動し以下のコマンド実行

//SIP(System Integrity Protecton) を有効
csrutil enable
//Parallelsに'kext-consent'を許可(4C6364ACXTはアプリケーションIDかな?)
spctl kext-consent add 4C6364ACXT

3.メニューから再起動して、Parallelsを起動

無事起動できました。

Parallels13

Parallels13

Laravel5.5でSlackにログ

Laravel5.5でSlackにログ

ここで

https://api.slack.com/apps

Createで、

title

title

アプリ名を適当に入力+workspace選択

title

title

パーミッションを選んで。

title

title

Scopeの部分で、“send message as {アプリ名}”を選択

title

title

Install App to workspaceを

title

title

Authorizeする。

title

title

アクセストークンを確認する。

title

title

モノログインストール

$ composer require monolog/monolog

AppServiceProvider.phpの boot()に設定

<?php 
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Log::listen(function () use($token){
            $monolog = Log::getMonolog();
            $monolog->pushHandler(
                new SlackHandler('アクセストークン','#チャンネル名','notice','notice',false,Logger::NOTICE,false)
            );
        });
    }

ログ呼び出す。

logger()->notice('てすとですよー');

Laravel5.5でマークダウンメールのデザインをカスタムする方法。(ボタン色などの追加)

Laravel5.5でマークダウンメールのデザインをカスタムする方法。(ボタン色などの追加)

mail.phpの設定変更 リソースパスを追加

//cofig/mail.php 
    'markdown' => [
        'theme' => 'default',
        'paths' => [
            resource_path('views/emails/signeture'),
            resource_path('views/vendor/mail'), <<<この行追加
        ],
    ],

追加リソースパスにCSSを追加

今回ボタンの色のバリエーションのみ欲しかったので以下のみ追記

//  resources/vendor/mail/html/themes/my-theme.css

.button-orange {
    background-color: #E95205;
    border-top: 10px solid #E95205;
    border-right: 18px solid #E95205;
    border-bottom: 10px solid #E95205;
    border-left: 18px solid #E95205;
}

Mailableクラスでテーマを指定

<?php

namespace AppMail;

use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateQueueSerializesModels;
use IlluminateContractsQueueShouldQueue;

class RegisterShipped extends Mailable
{
    use Queueable, SerializesModels;
    
    public $user;
    public $subject = '会員本登録に関するご連絡';
    protected $theme = 'my-theme';
    
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user)
    {
        $this->user = $user;
    }
    
    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('emails.register');
    }
}

ボタンコンポネントでカラー指定

@component('mail::button', ['url' => action('UsersController@activate',$token),'color'=>'orange'])
登録する
@endcomponent

参考URL
https://laravel-news.com/email-themes

cakephp3 ViewのHtml->linkでリンクに検索パラメータを追加する

cakephp3 ViewのHtml->linkでリンクに検索パラメータを追加する

$this->request->queryでパラメータはあるのでHtml->linkのパラメータに+演算子で配列をくっつける。

<?= $this->Html->link('リンク', ['action' => 'index']+$this->request->query,['target'=>'_blank']) ?>

DomPDFで word-wrap,word-breakが効かなくて困った件。

DomPDFで word-wrap,word-breakが効かなくて困った件。

以下のとおり効かず幅が伸び続ける。

の中にdivやらpやらwidth指定しても伸びる。

折り返さない

折り返さない

table-layout: fixedで解決。

<table style="table-layout: fixed">

いろいろ散々はまったけど上記で一発解決。

table-layoutでかいけつ

table-layoutでかいけつ

LaravelのAPI別ドメインからaxiosを使ってアクセス

LaravelのAPI別ドメインからaxiosを使ってアクセス

LaravelでAPIを作っていて、外部のHTMLアプリからAjaxしようとするとクロスドメイン制約にかかって少しはまりました。(POST時に事前にOPTIONSで許可を確認とかCookieを有効にしないとCSRFのセッション切れたりetc.)

結論から

※セキュリティー的には許可の類は制限をするなど要検討。

//サーバー側はMiddlewareでヘッダーを追加
public function handle($request, Closure $next)
{
    $response = $next($request);
    if(APIアクセス判定条件){
        $response->header('Access-Control-Allow-Origin',request()->header('Origin'));
        $response->header('Access-Control-Allow-Credentials', 'true');
        $response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Authorization, X-CSRF-TOKEN');
        $response->header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    return $response;
}
//POSTなどの前にOPTIONSでリクエストがあるのでRouterに記述追加(許可のヘッダーはMiddlewareで管理なのでこちらは空のレスポンス作るのみ)
Route::options('{all}', function () {
    $response = Response::make('');
    return $response;
});
//クライアント側
axios.defaults.withCredentials = true
axios.defaults.headers.common['Content-Type'] = 'application/json';

if (method === 'get') {
  promise = axios.get(url, { params: params })
} else if (method === 'post') {
  promise = axios.post(url,params,{headers:{'X-CSRF-TOKEN':トークン}});
}

外部ドメインへのAjaxは禁止なのでサーバー側で “Access-Control-Allow-Origin” レスポンスヘッダーを返す。

これはセキュリティー上基本アクセス出来ないのでサーバー側のレスポンスヘッダーに加える必要があります。

$response->header('Access-Control-Allow-Origin',request()->header('Origin'));

クッキーを許可するために ‘Access-Control-Allow-Credentials’ で ’true’を返す。

Cookieを許可するのですが、この値を途中、1(数字)と返してしまいすこしはまった。文字列の’true’でうまくいきました。

$response->header('Access-Control-Allow-Credentials', 'true');

あとはaxios側もCookie送信がOFF ( オプションの withCredentials がfalse)になっているので設定します。

axios.defaults.withCredentials = true

リクエストで許可するヘッダーを ‘Access-Control-Allow-Headers’ で指定

基本的なものと、LaravelのCSRFのチェックに利用する ’X-CSRD-TOKEN’を加えます。

$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Authorization, X-CSRF-TOKEN');

許可するメソッドを ‘Access-Control-Allow-Methods’ で指定

許可するメソッドを指定します。(APIでGETのみならGETだけなどセキュリティー的云々)

$response->header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');

POSTの前にOPTIONSのリクエストが来る。

最初わからず混乱してたのですが、クロスドメインへPOSTする前にOPTIONSメソッドでpre-flightのリクエストを送信します。

  1. [axios]OPTIONSメソッド送信 →
  2. ←レスポンスを返す。[server]
  3. [axios]ヘッダーを確認(各種設定したOrigin,Header,Methodなどなど)
  4. [axios]各種許可されるならPOST送信

Page 2 of 38

Powered by WordPress & Theme by Anders Norén