投稿者: admin Page 17 of 47

CakePHP3で定数とかを設定してJSでも使いまわしたりCSSで利用したりしてみる。

Cakephpで作っていて、いろいろController/ActionでCSSやJavascriptをうまく使えないかと思って、定数 > JS/HTMLのClass名へ落とし込んでみました。(なにかもっとスマートにできそうな気もします。)

まずAppController.phpで。Routerをuse

use CakeRoutingRouter;

config以下とか、どこかでやったほうが良いとか有りますが、
action,controller名なども加えてまとめたくこの場所。

public function initialize()
{
    parent::initialize();
    $this->loadComponent('RequestHandler');
    $this->loadComponent('Flash');

    define('FULL_BASE_URL',Router::fullBaseUrl());
    define('CONTROLLER_NAME',strtolower($this->name));
    define('ACTION_NAME',strtolower($this->request->action));

で、HTML側
JavaScriptの定数用してと、bodyクラスにconntroller-action名を割当

    <script>
        var FULL_BASE_URL = '<?= h(FULL_BASE_URL) ?>';
        var CONTROLLER_NAME = '<?= h(CONTROLLER_NAME) ?>';
        var ACTION_NAME = '<?= h(ACTION_NAME) ?>';
    </script>
</head>
<body class="<?= h(CONTROLLER_NAME.'-'.ACTION_NAME) ?>">

full_base_urlは jsでも取れるとか気になりますが、見通しがよくなるようにまとめてみました。

cakephp3でのトランザクション

利用するコントローラーでまずConnectionManagerをuse;

use CakeDatasourceConnectionManager;

Cakephp2と基本的には同じく、begin()で初めて、処理が終わってcommit() 、例外時は rollback()。

$connection = ConnectionManager::get('default');
$connection->begin();

if ($this->Products->save($product)){
    $connection->commit();  //OK時
}else{
    $connection->rollback();    //エラー時
}

commit()を行わずに終了した場合は、保存されなかった。
(2017.10.03現在の ver3.5.0にて確認)

バーコードについてJANの基本とPHPのライブラリを調べてみたのでメモ。

バーコードには1次元バーコード(お菓子とかパン缶詰とかについている俗に言うバーコードハゲ的な者)
2次元バーコードとは、QRコード等、横方向だけでなく縦にも情報を持つもの総称

今回は、業務上1次元バーコードについて調べた。

代表的な種類

JAN(EAN、UPC) CODE39 CODE128 NW–7 ITF   
文字 数字0–9 数字と、アルファベット/記号は一部 数字/アルファベット/記号(フルASC) 数字と、アルファベット/記号は一部 数字0–9
桁数 13 or 8 可変 可変 可変 14 or 16

今回使うJANの種類3種類

標準タイプ13桁 標準タイプ13桁 短縮タイプ8桁
詳細 2001年1月以後の登録 2000年12月以前の登録 小さい物用

今後使う2001年1月以降のタイプついてのみ詳細

説明 GS1事業者コード(9桁) 商品アイテムコード(3桁) チェックデジット(1桁)
コード例 458240192 927 3
設定者 流通システム開発センターが付与 事業者にて設定 計算式で算出

PHPにて画像生成するのでライブラリなど調査

githubでスターの一番多かった上のもので大丈夫かな。ライセンスあGNU

名称 url ライセンス、料金など
PHP Barcode Generator https://github.com/picqer/php-barcode-generator GNU Lesser General Public License v3.0
php-barcode https://github.com/rlt3/php-barcode/ MIT License
Barcode.php http://www.pao.ac/barcode.php/ 21,600
Image_Barcode2 https://pear.php.net/package/Image_Barcode2/download PHP License
PHP-Barcode https://ashberg.de/php-barcode/download/ GNU General Public License

Gitコマンド打ち込むのが苦痛でDashに登録してタイプ数をへらす。

git ほげほげ、gitほげほげ、何度も打ち込んで大変なのでDashにスニペットとして登録してタイプ数をへらしてみました。

楽。

楽。

よく使うものを登録しておけばタイプ数が約半分くらいになります。
git status の10文字が、 gits; 5文字。
git commit -m ‘’ の16文字が、gitc; の5文字。
git commit -am ‘’ の17文字が、 gitam; の6文字。
git commit –amendとかも。18文字タイプが、 ‘gitamd;’ 7文字。

とかなり楽になり、細かいコミットが面倒でなく1つの事 = 1コミットでも面倒でなくなりそうです。

登録したスニペットたち

登録したスニペットたち

cakephp3で基本のorderを指定する場合はbeforeFind()メソッドをTableクラスに追加する。

以前のCakePHP2では、Modelのクラスのプロパティー $orderに指定すればよかったですが、なくなっているので以下のようにbeforeFindメソッドをTableクラスに追加で可能。

class StatusesTable extends Table
{
     *
     *
     *
    public function beforeFind(Event $event ,Query $query, $options, $primary) {
        if(!isset($query->order)){
            $query->order(['Statuses.type'=>'ASC']);
        }
        return $query;
    }

     *
     *
     *

すこしはまったのが、以前までの感覚で ‘Status.type’ ってやると、エラーとなった。
Table = 複数系との思考に切り替えないとだ。(Statuses.typeでOK)

cakephpで複数単語名のコントローラーのルーティングでエラー

コントローラー名を OrderDetailsConttollerという風に
Order , Details からなる場合のルーティングがかわっていた。

CakePHP2までは、
http://example.com/order_details/
で良かったけど。CakePHP3では。

http://example.com/order-details/

となっているみたい。

/src/config/route.php を覗いてみると。  

Router::defaultRouteClass(DashedRoute::class);

という設定があり、デフォルトルートはDashed ルートClassだよと、なっている。
Router::defaultRouteClassの設定でいろいろルーティングを設定できるみたい。
(ルートをモジュールチックにしていろんなURLに対応できるようにしたんだなぁ。たしかにメディアのリニューアルとかだと、URL変えたくないし独自ルールをくつけるならココでオリジナルのクラスにかえちゃうと楽そう。)

参考 :
https://book.cakephp.org/3.0/ja/development/routing.html

cakephp3で自動でフィールドのタイプを認識できなかった。(due_dateという名称がわるいの??)

cakephp3で自動でフィールドのタイプを認識できなかった。(due_dateという名称がわるいの??)

cakephp3で自動でフィールドのタイプを認識できませんでした。あるテーブルで。
due_date という名前のフィールド(カラム)をか使っていたのですが、どうしてもうまく行かず。
dueという名称にしたらうまく判定できました。

FormHelper > モデルのschemaとかまでは正しく’date’と認識されているのだけど、その先の何処かで’text’と判定されてしまっていたみたい。掘り下げたいけどタイムアップでとりあえず対策のみメモ。

Cakephp3で、入力する日付フォーマットを日本語にする方法

Cakephp3で、入力する日付フォーマットを日本語にする方法

src/View/AppView.phpで定義すると楽に実装できました。
– 基本形成はdateWidgetで
– 細かいオプション変数としてテンプレートに渡して +=で必要分はテンプレートで追加

//src/View/AppView.php
class AppView extends View
{
     *
     *
     *
     
    public function initialize()
    {
        $this->Form->templates([
            'dateWidget' => '{{year}}年{{month}}月{{day}}日{{hour}}:{{minute}}',
        ]);
        $this->set('dateFormat',[
            'monthNames' => false,
            'minYear' => date('Y')-10,
            'maxYear' => date('Y')+10,
            'default' => date('Y-m-d H:i:s')
        ]);
    }
}
//your template 
echo $this->Form->control('due',$dateFormat+['label'=>'期限']);

PHPで連想配列をマージ(extend)するのは簡単だった。

PHPで連想配列をマージ(extend)するのは簡単だった。

今頃感ですが意外と使ったことがなかった。。orz..

$data = ['name'=>'yamaaaaa','job'=>'engineer'];
$data+= ['age'=>40];
print_r($data);//Array ( [name] => yamaaaaa [job] => engineer [age] => 40 )

php7にて確認。

Materialize.cssフレームワークでのメインのカラーの変更

Materialize.cssフレームワークでのメインのカラーの変更

流れは、ソースを持ってきて、変数の _variables.scssのカラー名を一箇所変更して再度コンパイルするだけ。

ソースは、materialize-css/sass以下を全部持ってくる。

tree

tree

/components/_variables.scssを開いて編集する、
38行目辺りの、$primary-colorを設定している箇所を ‘materialize-red’ から任意の色に変更。
以下は ’light-blue’の例。(色の種類は http://materializecss.com/color.html のColorPalette参照)

$primary-color: color("light-blue", "lighten-2") !default;

であとは、materiarize.scss をコンパイルする(components以下は@importしている)

参考ページ
http://materializecss.com/sass.html

Page 17 of 47

Powered by WordPress & Theme by Anders Norén