MacのターミナルのBellを無効にする

Author:

MacでTerminalを動かすと、タブキー押下時等Beep音が鳴ります。
これを無効する手順はソフトごとに違うので、まとめてみました。

ターミナルの場合

ターミナル→環境設定→プロファイル→オーディオベルのチェックを外す

iTerm2

Preferences→Profiles→Silence Bellのチェックを入れる

PHPStormなどIntellij関連の製品

Preferences→Tools→Terminal→Audible Bellのチェックを外す

とりあえず個人的にはこれくらいしか使わないけど、他にも使うものあったら書き加えます。

PHPStormでGITがエラーになった

Author:

なぜかMacでPHPStormを起動したら”error running git”というエラーが出た。
まさかパスがおかしくなるわけないのに。

Gitの設定画面にTestってのがあったので押してみたら、error code 69とか。
ちょっと調べてみたところ、どうやらXCodeをアップデートしたのが原因っぽい。
とりあえずXCodeを起動して同意するとか初回設定を終わらせてみたらちゃんと動くようになった。

ああ、先日El Capitanにした時にXCodeのバージョンも上がったっけ。
ってことで一件落着。
同じようなトラブルに陥った方は参考にしてみてくださいな。

LaravelのRequestクラスをまとめていこう

Author:

LaravelのRequestクラスをまとめていきましょう。
ちょっと量が多いので少しずつまとめていきますね。

URLを表示する

$request->url()で取得できます。
$request->fullUrl()とするとクエリ付きで取得することができます。

パスを表示する

$request->path()で取得できます。
$request->decodePath()とするとrawurldecodeをつけて取得することができます。

URLパターンを判定

$request->is()はURLの正規表現をします。
$request->is(‘test/*’)といった具合に。

ajaxかどうか判定

$request->ajax()とするとxmlhttprequestかどうかの判定ができます。
$request->pjax()とするとヘッダーにX-PJAXが入っているかどうかの判定をします。

httpsかどうか判定

$request->secure()でhttpsかどうかの判定ができます。

Laravelの使い方とかのまとめ

Laravelのログ周り

Author:

LaravelのログはMonologというライブラリがベースになっているようです。

debugフラグ

他のフレームワークでもおなじみdebugフラグはconfig/app.phpにあります。
‘debug’ => env(‘APP_DEBUG’, true),

ログセッティング

同じくconfig/app.phpにあります。
single, daily, syslog, errlogが選べます。
‘log’ => ‘single’,

ログの出し方

syslogと同じですね。8通りのログが出せます。
Log::emergency($error);
Log::alert($error);
Log::critical($error);
Log::error($error);
Log::warning($error);
Log::notice($error);
Log::info($error);
Log::debug($error);

Laravelの使い方とかのまとめ

Laravelのbladeってやつをまとめてみた

Author:

PHPフレームワークLaravelのviewではbladeというテンプレートエンジンが使えます。
このブレードってやつについてまとめてみました。

bladeって何なのさ

ブレードはクラスのように階層化したテンプレートエンジンです。
階層化されているので、たとえばフッターとかの決まりきった部分は基底クラスに定義して、bodyの中だけを書いたbladeを読みこむ、という使い方ができます。

サンプル

今回は二つのblade、base.blade.phpとindex.blade.phpがあるとします。
基底クラス側となるbase.blade.phpはこんな風に書かれます。

<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('body')
base
@show
</body>
</html>

この@がついている部分がblade用の記述です。
@yieldは変数を読み込んでいるような感じで理解すればいいですね。
echo $titleと書かれているようなもので、$titleは子クラス(クラスじゃないけど)で定義します。

@sectionは関数というかブロックというか、一つのまとまりです。
@sectionの終わりを@showとしているので、base単体で呼んでもこのまま表示されます。

続いて子供側となるindex.blade.phpを見てみましょう。
こんな感じです。

@extends('base')
@section('title')
title sub
@endsection

@section('body')
@parent
sub
@stop

@extendsは継承元を記載します。
class index extends baseといった感じ。
んでsectionが二つ書かれていますが、@section(‘title’)はbase側のyieldに入る値です。
次の@section(‘body’)には@parentとあるので、親クラスの@section(‘body’)の中身であるbaseという文字列が読まれ、次にsubという文字列が読まれます。
結果的にこれを読みだすと

<html>
  <head>
    <title>title</title>
  </head>
  <body>
    base
    sub
  </body>
</html>

となるわけです。

Controllerから呼ぶ

呼び方は普通にviewを呼ぶのと一緒。

public function index()
{
    return view('test/index', ['value' => 1]);
}

この場合はresource/views/test/index.blade.phpというファイルがあればそっちを優先して呼ばれます。
無ければresource/views/test/index.phpが呼ばれます。

他の@要素

@yield、@section以外にも色々な@要素があるので紹介します。

{{ $var }}

echo $varと一緒です。htmlentitiesが自動でかぶさります。昔は{{{ }}}と{{ }}でエスケープする、しないが分かれていたようだけど5系はどっちもエスケープするっぽい。

{!! $var !! }}

こちらはエスケープしない版。

{{ $var or ‘default’ }}

echo $var !== null ? $var : ‘default’のような感じ。

{{– Comment –}}

コメントです。

@extends(‘layout’)

親ブレードを指定します。

@if(condition)

ifです。コントローラーから渡した変数が使えます。

@if (Auth::guest())
    <li><a href="{{ route('login') }}">Login</a></li>
@else
    ・・・
@endif

@else

elseです。

@elseif(condition)

elseifです。

@endif

ifの終わりです。

@foreach($list as $key => $val)

phpのforeachと同じです。

@endforeach

foreachの終わりです。

@for($i = 0; $i < 10; $i++)

phpのforと同じです。

@endfor

forの終わりです。

@while(condition) – phpのwhileと同じです。
@endwhile – whileの終わりです。

@unless(condition) – if (!condition)という意味です。
@endunless – unlessの終わりです。

@include(file) – 他のブレードを読み込みます。
@include(file, [‘var’ => $val,…]) – 他のブレードを読み込み、変数を与えます。

@each(‘viewfile-to-render’, $data, ‘variablename’) – foreach($data as $variablename)という形式でviewfile-to-renderブレードを読み込みます。
@each(‘viewfile-to-render’, $data, ‘variablename’,’optional-empty-viewfile’) – 上記と同様ですが、$dataが空の場合はoptional-empty-viewfileを読み込みます。

@yield(‘section’) – sectionを当てはめる場所です。

@section(‘name’) – セクションの開始を示します。
@show – セクションの終わりを示します。showはそのまま表示されます。
@stop – セクションの終わりを示します。stopはyieldの場所にしか表示されません。
@endsection – Laravel3の頃に使われていたセクションの終わりです。現在でも使えます。
@append – 上位ブレードで同じセクションがあった場合、追記されます。
@overwrite – 上位ブレードで同じセクションが合った場合、上書きされます。
@parent – 上位ブレードのセクションをそのまま読み込みます。

@lang(‘message’) – 現在の言語に沿った文章を表示します。
@choice(‘message’, $count) – 現在の言語に沿った文章を複数形で出す場合に$countが使われます。

こんなもんかな。
まだあったら追記します。

Laravelの使い方とかのまとめ

Laravelの使い方とかのまとめ

Author:

個人的にLaravelというフレームワークが好きである。
他のフレームワークと比べると使いづらさもあるし、速度も遅いのだが名前の響きが好きなのです。
ララベルってドラクエの魔法か街の名前にありそうだし。

Zend Frameworkとかださすぎるし、cakePHPやfuelPHPもなんかかっこ悪い。
codeIgniterは名前も悪くはないしけっこう好きなほう。
phalconとかはかっこいいし使ってみてもいいかな。

さてそれはおいといて。
だんだん記事が増えてきたのでまとめておきます。
今後も暇な時とかに地味に追加していく予定。

Laravelをインストールしてみた
Laravel5でmigration実行時にhomesteadユーザーでログインされてしまう
Laravelのディレクトリ構造はこんな感じ
Laravelの基本的な書き方
Laravel Elixirでcoffeescriptやless、sassもついでに学ぼう
Laravelのルーティングは色々書き方がある
Laravelのbladeってやつをまとめてみた
Laravelのログ周り
LaravelのRequestクラスをまとめていこう

Laravelのルーティングは色々書き方がある

Author:

Laravelのroutes.phpはちょいと他のフレームワークと違う。
どんな風に違うのか軽く書いておきましょう。

一般的な使い方

Route::get('hello/', 'HelloController@index');

他のフレームワークでもお馴染み、コントローラーのメソッドに渡す方法です。

function直書き

Route::get('/func/', function() {
    return 'Hello World';
});

まるでjQueryみたいだけど、こんな書き方もできます。

Restfulその1

Route::controller('/hoge/', 'HogeController');

こう書くとぱっと見/hoge/でHogeControllerのindexメソッドが呼ばれそうですがLaravelは違う。
なんとGETで/hoge/indexにアクセスするとgetIndexという関数が、POSTで/hoge/indexにアクセスするとpostIndexという関数が呼ばれるのです。
びっくりですよね。

Restfulその2

Route::resource('/fuga/', 'FugaController');

こう書くとさらにびっくり。
GETやPOSTで叩いた時にindex、create、store、show、edit、update、destroyという関数がルーティングされるのです。
+——–+———-+——————+————–+———————————————+————+
| Domain | Method | URI | Name | Action | Middleware |
+——–+———-+——————+————–+———————————————+————+
| | GET|HEAD | / | | Closure | |
| | GET|HEAD | test | test.index | App\Http\Controllers\TestController@index | |
| | POST | test | test.store | App\Http\Controllers\TestController@store | |
| | GET|HEAD | test/create | test.create | App\Http\Controllers\TestController@create | |
| | DELETE | test/{test} | test.destroy | App\Http\Controllers\TestController@destroy | |
| | PATCH | test/{test} | | App\Http\Controllers\TestController@update | |
| | GET|HEAD | test/{test} | test.show | App\Http\Controllers\TestController@show | |
| | PUT | test/{test} | test.update | App\Http\Controllers\TestController@update | |
| | GET|HEAD | test/{test}/edit | test.edit | App\Http\Controllers\TestController@edit | |
+——–+———-+——————+————–+———————————————+————+
すごいですなあ。

Laravelの使い方とかのまとめ

Laravel Elixirでcoffeescriptやless、sassもついでに学ぼう

Author:

LaravelにはElixirというツールが付属している。
gulpをベースとしたツールで、これ一つでcoffeescriptやless、sassのコンパイル、おまけにphpunitなんかも実行できてしまう。
だいぶ便利ですね。
jsやcssはそのまま書くという人もいるでしょうし、僕も基本的にはそのまま書いてしまうのだけれど、せっかくあるのだからcoffee/less/sassを使えるようにしたほうがいいですな。

gruntかgulpかどっちがいいか、という話は色々出ているけど、やっぱりこういうツールがある以上gulpに軍配があがるのか。

もちろん中身はgulpなので、node.jsやnpm、gulpをインストールしないといけないですけど。
しかし書くのが非常に簡単である。

elixir(function(mix) {
    mix.sass('app.scss');
    mix.coffee('app.coffee');
});

これだけでresource/assets/coffeeとかresource/assets/sassのファイルをコンパイルしてpublic/jsやpublic/cssに配置してくれる。
普通にgulpで書くなら

gulp.task("coffee", function() {
    gulp.src("build/js/**/*coffee")
        .pipe(coffee())
        .pipe(gulp.dest("dest/js"));
});

こうなるのに、圧倒的な記述量の少なさにびっくりだ。

というわけで、そのまま書くかビルドするかは人それぞれだけど、Laravel使うならせっかくツールがあるのだしcoffeeとか使っていくのをお勧めしまっせ。
しかし個人的にLaravelは名前の響きが良いから好きなフレームワークなのですが、ララベルエリクサー(エリクシール?)、いいですねw

Laravelの使い方とかのまとめ

cakePHPのModelでSQLのCASE WHEN文を使いたい

Author:

cakePHPのModelでcase文を使いたい場合、fieldsにそのまんま書けばいいです。
別にカラム名しか書いちゃいけないというわけじゃないです。

こんな感じ。
$this->find(‘all’, [‘fields’ => ‘sum(case when age > 30 then 1 else 0) as count’]);

もちろんcountとかmysqlの関数も同じように書けばそのまんま反映されます。
joinsみたいに特別な書き方する必要は無いです。

codeigniterでも$db->select()内にそのまま書けば動くし、とりあえずこういうSQL関数はそのまんま書いてみると動いたりするものです。

Eclipse上のファイルの関連付けを変更させる

Author:

Eclipse上のエクスプローラーでファイルを開くときのエディタを修正したくなる場合があるかと思います。
場合によっては外部エディタが起動したりしてしまうこともありますからね。

一応確認したバージョンはMarsですが、この設定は昔から変わりませんな。

まずはウィンドウの設定を開きます。
んで、一般→エディター→ファイルの関連付けを選択。
ちなみに日本語版ですが、海外版だとWindow→Preferenceになりますね。

すでに登録されている拡張子なら、それを選択します。
開きたいエディタが無いのなら下側の追加ボタンから追加しましょ。
不要になったら除去で消せます。
(デフォルト)ってのが無いとエラーになったり外部エディタが起動したりするので、必ずどれかをデフォルトにしておくこと。

登録されていない拡張子なら、上側の追加ボタンから追加できます。

プラグインによっては違うエディタに切り替えられていたり、逆にプラグインのエディタに切り替えたい時とかは覚えておきましょう。
しかしEclipseの設定はすぐに目的のものが探し出せなくて困りますなあ。