ごみばこ

プログラムに関する備忘録などを書いています。

Laravel Note - トップページの表示

少し前にLaravelを触ったのですが、色々とあり別のフレームワークを使用する状況に。
備忘録と学習を兼ねてLaravelについて書いていこうと思います。
タイトルの通り、今回はトップページの表示までを書いていきます。
誤字・脱字、記事の誤り等があればコメント宜しくお願い致します。

使用するもの

virtual boxの設定は割愛します、すみません。
公式ドキュメントを参照してください。

インストール

composerを使用してインストーラをダウンロードします。

composer global require "laravel/installer"

これでプロジェクト作成のコマンドが実行出来るようになります。

laravel new ProjectName

# composerの場合
composer create-project --prefer-dist laravel/laravel ProjectName

プロジェクトディレクトリで以下のコマンドを使用することで、ビルトインサーバーの起動が行えます。
ホストの設定を0.0.0.0とすることで、任意の端末からアクセス出来ます。

php artisan serve --host=0.0.0.0

# host, portを両方設定する場合
php artisan serve --host=xxxx --port=xxxx

上記のコマンドが問題なく実行できれば、設定したホストにアクセスしてみましょう。
Laravelと文字が書かれたページが表示されれば完了です↓ f:id:choco_0214:20170804010648p:plain

MySQL Workbenchからhomestead上のDBを操作する

目的

  • クエリの実行を少しでも楽にしたい
  • テーブルの作成も楽にしたい

手順

  • MySQL Workbenchを起動し、新しい接続の作成。([+]ボタンをクリック)
  • [Manage Server Connections]のダイアログが表示されたら、設定を以下のようにする。
    • [Connection Method]で[Standard TCP/IP over SSH]を選択。
    • [SSH Hostname]は127.0.0.1:2222(vagrant起動時に表示されるIP)を入力。
    • [SSH Username]はvagrantを入力。
    • Homestead.yamlで使用している非公開鍵を[SSH Key File]で選択。
    • MySQL Hostnameはlocalhostを設定。
    • MySQL Server Portはデフォルトの3306で問題なし。
    • Username, Passwordは接続するLaravelプロジェクト内の[.env]ファイルを参照。
    DB_USERNAME='connection DB name'
    DB_PASSWORD='DB password'

接続テストを実行してエラーが出なければ完了!

参考URL

MySQL WorkBenchで外部サーバへSSHを通して接続する方法

Homesteadで複数のフォルダをリンクさせる

手順

  • Homestead.yamlのfoldersを下記のように編集。
folders:
    - map: C:\laravel_1
      to: /home/vagrant/Code_1
    - map: C:\laravel_2
      to: /home/vagrant/Code_2
  • vagrantを再起動させて、追記したフォルダが追加されていたら完了。

windowsのcmdにエイリアスを登録する

登録方法

doskey マクロ名=コマンド
ex) doskey ls=dir
  • doskey /macrosで登録しているマクロを確認可能
  • 終了後には適用されなくなる
  • doskey /macros > %USERPROFILE%\macros.txtで出力、
    doskey /macrofile=%USERPROFILE%\macros.txtで読込

マクロを適用した状態で起動する

  • ショートカットを作成して、リンク先末尾に以下を追加する
 /k doskey /macrofile=%USERPROFILE%\macros.txt

参考URL

Windowsのコマンドプロンプトでaliasを設定する (cmderの設定含む)

Laravelで権限を追加する(同一テーブルの場合)

ログインユーザーに権限を付与して処理を制御したい場合。
ログインに使用するテーブルはデフォルトのusersです。
権限を管理するカラムを追加して下さい。

上記が完了したら、Userモデルに少し追記します。

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{

  const ADMIN = 1;

  /**
  * The attributes that are mass assignable.
  * roleを追加しています。
  * @var array
  */
  protected $fillable = [
    'name', 'email', 'password', 'role',
  ];

  /**
  * The attributes excluded from the model's JSON form.
  *
  * @var array
  */
  protected $hidden = [
    'password', 'remember_token',
  ];

  /**
   * 管理者権限か判定します。
   * @return boolean true->管理者
   */
  public function isAdmin(){
    return $this->role_id === User::ADMIN;
  }

}

次にミドルウェアを追加します。

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use App\User;

class AdminMiddleware
{
  /**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
  public function handle($request, Closure $next)
  {
    // ログイン中のユーザーが管理者権限ならリクエスト実行
    if(Auth::check() && Auth::user()->isAdmin())
    {
      return $next($request);
    }
    
    // アクセス拒否のページへリダイレクト
    return redirect('/denied');
  }
}

最後にKernel.phpの$routeMiddlewareに追記します。

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;
use \Middleware\AdminMiddleware;

class Kernel extends HttpKernel
{
    // 省略…

    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,
        'admin' => \App\Http\Middleware\AdminMiddleware::class,    // 追加箇所
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
}

これでmiddleware(‘admin’)と書けば、管理者とゲストで分割出来ると思います。

String.substringの違い

最近になってjavaを触り始めました。
文字列から特定箇所の文字を取得するsubstringメソッドがありますが、
これが以前触っていた.NET Frameworkと異なっていたのでメモ。

C#の場合

string.substring(開始位置(0~), 取得する文字数)

javaの場合

String.substring(開始位置(0~), 取得したい文字列末尾のインデックス + 1)

例えば、substring(1, 3)とするとC#では2文字目から3文字分取得出来る。
しかし、javaの場合は2文字目から次の3文字目までが返ってくる。
その為C#と同様の結果を得るには、substring(1, 4)と記述する必要がある。

さっさと公式ドキュメント見ておくべきでした。

Eclipseショートカットメモ

Eclipseを使うようになったのでメモ。

インデントを整える
  • Ctrl + Shift + F
名前の変更
  • Alt + Shift + R
    まとめて変更されるので便利。
try-catchの挿入
行の削除
  • Ctrl + D
コンテンツアシスト
  • Ctrl + Space

今のところ、よく使うのはこれくらい。

参考URL

tbpgr.hatenablog.com