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の使い方とかのまとめ

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の使い方とかのまとめ