An empty bottle

しがないメンヘラエンジニアの日記。

git に add する際の改行コード問題

割と毎回ですね、 git add . を叩くと CRLFに強制的に変えられるんですよね。

自分のソースじゃなくて、 サードパーティだったり、プラグインだったり。 ※そもそもgitの管理対象にするなって話はしないでくだちい。

解決策としては .gitattribute ファイルの * text=auto を消すだけ。

わー嬉しい。

【Cloud9】リダイレクトが繰り返し行われた。【Chrome】

備忘録。

特定のサイトの Cookie を削除する
1.パソコンで Chrome を開きます。
2.画面右上で、その他アイコン その他 次へ [設定] の順にクリックします。
3.下の方にある [詳細設定] をクリックします。
4.[プライバシーとセキュリティ] で [コンテンツの設定] をクリックします。
5.[Cookie] をクリックします。
6.[すべての Cookie とサイトデータ] で、ウェブサイトの名前を検索します。
7.サイトの右側で削除アイコン 削除 をクリックします。
ChromeCookie の削除、有効化、管理を行う - パソコン - Google Chrome ヘルプ

RedmineからTrelloへ

無料プランで一人で試していますが、

Slackへの通知やプラグインが充実していて助かっています。

awe-some.net

文字列を配列チックに扱う!? @python3

連投です。

面白いですよ、python

今回は配列からの文字の抜き出し方、、をメモ。

@PHP

<?php

$str = 'hoge';

// 1文字目だけ
echo mb_substr($str, 0, 1);
// -> 'h'

@Python

str = 'hoge'

print(str[0])

画期的…

配列の種類 @python3

最近、phpしか得意でない自分が嫌になり鬱になってきたので、薬を飲みつつpythonに手を出して、djangoにも浮気しようとしています。 まあ鬱々としているのはFC2で書きます。

さて本題。ある程度プログラム慣れしてる人向けです。

PHPでは、配列を

<?php

// ex.1
$array = array('a', 'b');

// ex.2
$array = ['hoge', 'fuga']

と記載します。 pythonでは簡単に言うと「変更可能(mutable)な配列」と「変更不可能(immutable)な配列」があります。 連想配列も勿論あります。 下記3種類について再代入してみてくださいまし。tupleのみエラーがでます。

# list is mutable 
num_list = [1, 2, 3]

# tuple is immutable
num_tuple = (1, 2, 3)

# dict is mutable
my_cat = {'size': 'fat', 'color': 'black'}
print(my_cat['size']) # fat

面白いよね。 {} [] () で違うんですよね。

envの内容がとれ「ないよう」なんちゃって @laravel5.6

ひとことメモです。

php artisan config:cache

でも時々envの中身が取得されないときがあります。

■対応策

rm -f bootstrap/cache/config.php

【Laravel5.4】laravel de ajax【ajax苦労した。】

はじめに

「そんなこと知っとるわ」って言わないでね。

routes

まず、通常のアクセス(通常のGETやPOST、CRUDによるPUT、DELETE)はweb.phpに書くとして、
apiajaxに関してはapi.phpに記載したいと思った。

で、api.phpに飛ばすためには、 /api/hogehoge とprefixを「api」にすりゃいいのよね。

ルーティング 5.5 Laravel

routes/api.php

<?php

Route::group(['middleware' => ['web.ajax']], function () {
    // 設定ファイル /app/Http/Middleware/AjaxOnlyMiddleware.php
    
    Route::post('/getsubmenu/{id}', 'MenuMasterComtroller@getSubMenu');
});

AjaxOnlyMiddleware.php

routes/api.php にて、「ajaxのみ通信許可すっぜ!」という処理を追加しましょう。 こういった通信制限はroutesでやっちゃいたいですね。

api.phpの中にmiddlewareを作っちゃいましょう。

$ php artisan make:middleware AjaxOnlyMiddleware

これで、

app/Http/Middleware/AjaxOnlyMiddleware.php

ができちゃうね。

中身はこうしよう。 簡単だね、$request->ajax() で判定できちゃうね。

<?php

namespace App\Http\Middleware;

use Closure;

class AjaxOnlyMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if($request->ajax() === true)
        {
            return $next($request);
        }
        else 
        {
            abort(404,'is not ajax!!!!');
        }
    }
}

Kernel.php

app/Http/Kernel.php だす。

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\TrustProxies::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
        
        'web.auth' => [
            \App\Http\Middleware\Auth::class,
        ],
        
        // ↓ここ!!!!!
        'web.ajax' => [
            \App\Http\Middleware\AjaxOnlyMiddleware::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

実際のjs

ここでは、selectboxで選択したdata-要素を渡す設定。

<script>
    
$(document).ready(function() 
{

    $('select').change(function() 
    {
            
        //選択したvalue値を変数に格納
        var val = $(this).val();
        val = $('select option:selected').data('menuid');
        
        $.ajax({
            type: 'POST',
            url: '/api/getsubmenu/' + val,
            headers: {
                'Content-Type': 'application/json',
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
            },
            dataType: 'json',
            success: function(data)
            {
                console.log(data);
            },
            error: function(XMLHttpRequest,textStatus,errorThrown) // 接続が失敗
            {
                console.log(textStatus);
                alert('It is error!!'); // エラーメッセージ
            }
        });
        return false;
        
    });
});

</script>