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の設定はすぐに目的のものが探し出せなくて困りますなあ。

Laravelの基本的な書き方

Author:

フレームワークによってModelやViewの読み込み方って地味に違いますよねえ。
こんな感じに書きます。

ちなみにこれはroutes.phpにRoute::controllerと設定した場合ですね。
Route::resourceで設定した場合はgetIndexではなくindexになります。

namespace App\Http\Controllers;
// モデルの定義
use App\User;

class HomeController extends Controller
{
    public function __construct()
    {
    }

    public function getIndex()
    {
        // モデルはnewでインスタンス生成が必要
        $user = new User;

        // モデル関数の呼び方は普通に
        $activeUsers = $user->getActiveUsers();

        // ビューを呼ぶ
        // 変数は第二引数にarrayで渡す
        return view('home.index', ['activeUsers' => $activeUsers]);
    }
}

Laravelの使い方とかのまとめ

Laravelのディレクトリ構造はこんな感じ

Author:

Laravelをとりあえずインストールしてみると、app配下にModelもViewもControllerも無いのでびっくりするかも。
それぞれこんな感じに作成するようです。

app/Http/Controllers/

ここに通常のコントローラーをいれます。

app/

デフォルトでUser.phpが入っているように、Modelはディレクトリ掘らないで直下に置きます。

resource/views

Viewファイルはここに置きます。

resources/assets/

ここにlessとかcoffeescriptとかビルド前のファイルを置いておくと自動的にElixirがpublic/cssやpublic/jsへコピーしてくれます。

app/Http/

Laravelで重要なroutes.phpはここにあります。

config/database.php

DB設定はここです。

config/app.php

メイン設定はここにあります。

ディレクトリ構造がずいぶんと違うので注意しましょうね。

Laravelの使い方とかのまとめ

Laravel5でmigration実行時にhomesteadユーザーでログインされてしまう

Author:

Laravelでphp artisan migrate:installとかするとこんなエラーになりました。

  [PDOException]
  SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)

Laravelでデータベースのユーザー名をいじる場所は2箇所あります。
1つ目は他のフレームワークでもお馴染みのModel用。
config/database.phpにあります。

そしてもう一つはartisan用、コマンドライン用。
.envファイルにあります。

だからconfig/database.phpでユーザー名を書き換えたはずなのにphp artisan migrateとかやるとhomesteadユーザーでアクセスしようとするのですよ。

[tea@astrominit lara]$ cat .env
APP_ENV=local
APP_DEBUG=true
APP_KEY=Agam7O0R1nSHsPOksmFg0eM9IMwKEJfL

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Laravelは色々こういうところがあるのでご注意を。

Laravelの使い方とかのまとめ