20210604のlaravelに関する記事は14件です。

マイグレーションの実行

マイグレーションの作成 $php artisan make:migration create_posts_table でcreate_posts_tableを作成 public function up() { Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('name',20); $table->integer('member'); $table->string('title')->nullable(); $table->text('message')->nullable(); $table->string('grade')->nullable(); $table->string('comment')->nullable(); $table->timestamps(); }); } 上記を記載 投稿画面を作りたかったので 'title'と'message'は必須!! 投稿画面に募集人数の項目も作りたかったので $table->integer('member'); を追記。これで正しいのかわからないけど....。 あとはマイグレーションを実行するだけ! $php artisan migrate 今日はここまで! 明日は投稿機能を作っていく!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel・テンプレートエンジンとは

Laravelテンプレートエンジンとは 任意の名前.blade.php bladeとは【Laravel】で利用されているテンプレートエンジンの事 テンプレートエンジンとは、 HTMLの一部に変数や条件分岐、繰り返し等の各種処理を埋め込める仕組み {{$sample}}とは {{ }}に囲んだ形で変数名を指定すると、自動的に変数内の文字列が出力(echoと同じ)される。 {!! $sample !!}とは {!!$title !!}に囲んだ形で変数名を指定すると、エスケープを防止して出力する。 {{-- $sample --}} とは Laravelのコメント行 ディレクティブとは @から始まる文字列の事 @extends (エクステンドズ) レイアウトの呼び出し @extends('.blade.phpのファイル名') @section (セクション) レイアウトファイルの(@yield)に変数を穴埋め @section('埋め込むyieldの場所', 埋め込む変数) ※複数行になる場合は、@endsectionで閉じる @yield (イールド) @yield('ここに埋め込む宣言') @if() @elseif() @else @endif @foreach($samples as $sample) @endforeach
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

自分だけのCookbookを作ろう

プログラミングの上達にはアウトプットが大事 プログラミングの上達はとにかくアウトプットです。 私自身も、常に、 「実現したい機能がある→Googleで調べる→実装する(エラー出るのでトライアルアンドエラー)→やっと実現できる→忘れないようにブログにメモ」 という流れ。 自身の備忘録を目的に書いていますが、それがプログラミング技術の向上につながってるなぁと常々実感しています。 そして積み上がった記事は自分だけのCookbookになりました。 アウトプットって大事。 記事を残しておけば、自分のためにもなるし、他の人のためにもなるし、誰も損しません。 まぁ、Qiitaの目指してるところと同じです。 初心者こそアウトプットが大事 当然初心者こそプログラミングの上達をしたいでしょうから、なおのことアウトプットが大事です。 その日に学習したものをどんどんアウトプットしましょう。 Console.log('Hello, World!'); Qiitaだとクソ記事増やすなと怒られる といっても、上記のような「JavascriptでHello World!を出力する方法」なんて記事をQiitaに書いたら、「クソ記事増やすな」とか怒られます。公式に怒られるわけじゃないと思います。怒る人もいるというだけだと思いますが。 とはいえ、公式ガイドラインも「エンジニアにとって再利用性・汎用性の高い記事を書こう」、「エンジニアに有益な情報をもたらす記事を投稿しましょう」と謳っているので、初心者が今日学習したHello, Worldを記事にするということをQiitaが望んでないと思うことは間違ってなさそうです。 フリーのブログはプログラミング記事を書きにくい となると、自分でレンタルサーバーとかでWordpress使ってブログ立ち上げるか、フリーのブログサービス使うかっていう2択になるんですが、初心者がいきなりWordpressはハードル高いしお金もかかる。 じゃぁ、フリーのブログ一択になりますが、フリーのブログでプログラミング記事書きたいとは思いませんしおすすめしません。コード部分と文章部分を見やすく分けられないし、激しく読みにくいし、あとで「あの記事どこだっけ?」って探すのが非常に探しにくいし。 ってことで、自分のために記事を書くためのサイトを立ち上げました。 Qiitaの崇高な理念は激しく賛同しますし、Qiitaにこれまでなんども助けてもらいました。 ただ、Qiitaでは「他の人のために記事を書こう」ってことになっているので、クソ記事増やすなとか怒られたりするわけです。 つまり100%自分のために記事を書いていいサービスなら怒られないわけです。そして、結果的にそれが誰かのためになることがあるのならハッピーです。 そんな思いから新しいWEBアプリをたちあげました。 名前はownCookbookです。 コンセプトは、あなたの あなたによる あなたのための Cookbookを作ろうです。 私もこれまで色んなCookbookにお世話になってきました。初めて買ったCookbookは、「Rubyレシピブック 268の技」です。他にもBashやらC#やらPythonやら、色々本棚に並んでいてお世話になっています。Cookbookは偉大です。 そんなCookbookをあなた自身で作り上げればいいんです。プログラミングの学習をしながら、あなた自身のCookbookを作り上げましょう。 プログラミング技術も向上できるし、将来忘れたときにすぐ見返せるし、もしかしたら誰かの役に立つかもしれないし、もしかしたら将来書籍にまとめられるかもしれないし。一石四鳥くらいあります。 ownCookbookのいいところ Qiitaだととっちらかる記事がBookごとにまとめられる Qiitaでも記事を書きまくってると、「あの記事どこだっけ?」と、特定の記事を探したいときに、中々すぐに目的の記事にたどり着けません。 Pythonごととか、PHPごととか、今作ってるアプリごととか、色んな本を作ってそこに記事を綴っていけます。 Markdownで記事を書ける Markdownエディタを採用しています。レイアウトもQiitaを参考にしているのでQiita使ってる人はとっつきやすいと思います。 記事の順番を簡単に入れ替えられる Book内の記事の順番は後でドラッグアンドドロップで簡単に入れ替えることができます。なので、順番を気にせずに思いついたことから記事を書いていけます。 シェアが簡単 自分のためのCookbookとはいえ、知ってもらうことも大事。TwitterやFacebookなどに簡単に記事を共有することができます。 完全フリー 完全無料です。いつでも退会できます。 Let's try! ということで、使って損することはないので是非試してみて下さい。 フィードバックお待ちしております。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel・ルーティングだけでHTML を出力

<?php Route::get('/non_view_sample', function () { return ' <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>ルーティングのみでHTMLを出力</title> </head> <body> <h1>ルーティングのみでHTMLを出力</h1> <p>ルーティングのファイルのみで、HTML全体を返すと長くなります。</p> </body> </html> '; });
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのルーティングで1から10までを加算し、その結果を戻り値とする無名関数を作成

ルーティングで利用されている無名関数の中ではPHPの任意の処理を書ける <?php Route::get('/sum', function () { $sum = 0; for ($i = 0; $i <= 10; $i++) { $sum = $sum + $i; } return '1から10までの合計は'.$sum; });
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのルーティングでパスを取得

URLを取得できるコマンド $uri = \Route::current()->uri(); <?php Route::get('/practice', function () { return '現在のURL:'.$uri = \Route::current()->uri(); }); コマンド cd laravel_bbs php artisan serve --port=$PORT preview ボタンを押下 preview ボタンを押下 https://ドメイン名/practiceで検索
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】中間テーブルに値を追加・更新する方法

実現したいこと 中間テーブルに値を追加・更新する。 タグ機能を作る際に、プロジェクトテーブルとタグーテーブル紐付ける際に 中間テーブルを作り、値を追加・更新することができたので、紹介します。 テーブル設計 タグテーブル id name 1 Javascript 2 PHP プロジェクトテーブル id title 1 フロントエンドを学習しよう 2 バックエンドを学習しよう 中間テーブル(プロジェクトタグテーブル) id tag_id project_id 1 1 1 2 1 2 3 2 2 中間テーブルはこのように、テーブ同士が多対多の関係の時に必要になります。 中間テーブルに値を追加する方法 中間テーブルに値を入れるためのステップ テーブルのリレーションの設定 中間テーブルにアクセスし、値の追加 1. テーブルのリレーションの設定 タグのモデルでプロジェクトと紐付けます。belongsToManyは多対多のリレーション 時に使います。これで中間テーブルにアクセスするための準備は完了です。 public function project() { return $this->belongsToMany(Project::class); } 2. 中間テーブルにアクセスし、値の追加 実際に値を追加します。値を追加する場合はattach()を使います。 まず、どのプロジェクトにタグを紐ずけるか、設定します。 今回は、projectのid:1にタグid:1を設定し、attachメソッドで追加します。 $project = Project::find(1); //idが1番のプロジェクトを取得します。 $project->tags()->attach(1); //プロジェクトid:1にタグid:1を追加します。 中間テーブルを確認すると下記のようになります。 id tag_id project_id 1 1 1 このように、中間テーブルに値を追加できます。 中間テーブルの値を更新する場合 更新したい場合は、syncメソッドを使います。 syncメソッドの仕組みは値の削除、追加を行います。 今回の例なら、project_id:1にtag_id:1が登録されています。 syncを実行することで、tag_id:1を削除します。そして、$project->tags()->sync(2); としているので、project_id:1のtag_id:に2を追加します。 なので、attachを使わなくても、追加、更新はsyncでできてしまうのです。 $project = Project::find(1); //idが1番のプロジェクトを取得します。 $project->tags()->sync(2); //中間テーブルのproject_id:1のtag_idを更新 中間テーブルを確認すると下記のようになります。 id tag_id project_id 1 2 1 まとめ 中間テーブルへの値の追加はattach()メソッド、値の更新はsync()メソッド。 attach()を使わなくても、syncメソッドは追加、更新ができる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Cloud9上にlaravel / nuxt環境をgit cloneで作成する

いちから環境構築する手順はたくさんあると思いますが。 今回はまっさらなCloud9にlaravel/nuxt環境を構築するまで。 ※リモートリポジトリに環境がある前提。 ※phpのバージョンなどの環境構築は過去記事のこちらを参照。 git clone $ git clone リモートリポジトリ laravel編 $ mkdir vendor $ cp .env.example .env $ composer install $ php artisan key:generate nuxt編 $ npm install
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ドラッグアンドドロップで複数ファイルをアップロード【jQuery/Laravel】

いまさらながら複数ファイルアップロードするやり方を忘れないようにメモ 実現イメージ 赤いところにファイルをドロップするとファイルが追加されて、送信を押すとまとめてアップロードする最低限のサンプル HTML upload.blade.php <div id="upload_files_area" style="background-color:red; height:300px; width:100%;"></div> <button id="send">送信</button> JavaScript upload.js $(function(){ //FormDataオブジェクトを作成 var formData = new FormData(); //ファイルがドロップされたときに呼ばれる $('#upload_files_area').on('drop', function(ev) { var files = ev.originalEvent.dataTransfer.files; for (var i = 0; i < files.length; i++) { //FormDataオブジェクトにファイルを追加 //名前は'document_files[]'ってしてやる formData.append('document_files[]', files[i]); } }); //送信 $('#send').click(function(){ $.ajax({ url:'/upload_exec', type:'post', data: formData, processData: false, contentType: false, cache: false, }); }); }); PHP UploadController public function uploadExec(Request $request) { $files = $request->file('document_files'); foreach ($files as $file) { //ここではS3にアップロード Storage::disk('s3')->putFile('path', $file); } } まとめ これだけだとファイルをドロップしても画面上になにも表示されないので、実際にはFormDataに追加されているファイルを表示したり、削除するような機能を追加する必要があると思う。FormDataに追加されているファイルはformData.getAll('document_files[]');で配列として取得できるので、それを適当に操作してやると良い。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel&PHP&Carbonで時間の切り上げ、切り下げをする。(時間を丸める)

こんにちは、くりぱんです。 説明 今回は業務の中で、時刻を15分ごとの切り上げで表示する処理を実装したので、備忘録程度にまとめておきます。 おまけに、30分ごとの切り下げもやっていきます。 この記事で実現できること 時刻を丸める 開発環境 OS:MacOS PHP:7.3 Laravel:6 実装 15分切り上げる処理 例:12:53:32 → 13:00:00   10:13:32 → 10:15:00 // 切り上げる分数 $roundUp = 15; // Carbonインスタンス作成 $dateRoundUp = new Carbon('2021-06-04 11:48:25'); // 15分切り上げ→12:00:00になる $dateRoundUp = $dateRoundUp->addMinutes($roundUp - $dateRoundUp->minute % $roundUp)->format('Y-m-d H:i:00'); 30分切り下げる処理 例:12:53:32 → 12:30:00   10:13:32 → 10:00:00 // 切り下げる分数 $roundDown = 30; // Carbonインスタンス作成 $dateRoundDown = new Carbon('2021-06-04 14:48:25'); // 30分切り上げ→14:30:00になる $dateRoundDown = $dateRoundDown->subMinutes($dateRoundDown->minute % $roundDown)->format('Y-m-d H:i:00'); 切り上げ、切り下げともにroundUpとroundDown変数を変えることで、10分の切り上げや切り下げなど臨機応変に対応できるようになります。 最後に 少しでも役に立った!という時は、LGTMをポチッと、、、笑 1つでもLGTMが付くとその日がハッピーになるんです! 役に立たなかった時は、怒らないでコメント頂けると幸いです笑 Twitterもやってます! プログラミングや金融知識について、エンジニアの現実についてつぶやいています! よかったら見てみてくださいね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel ヘルパ関数のconfigを使って連想配列からキーとバリューを取得する方法

こんにちは、くりぱんです。 説明 今回は、configディレクトリの中に自作したwords.phpの連想配列から、データを取り出す方法を書いていきます。 コード内にてハードコードで書くよりも、こちらに必要な文字データをまとめておいて、config()で取得するとメンテナンス等しやすくなるので、とてもおすすめです。 開発環境 OS: MacOS PHP: 7.3.11 Laravel: 6.2 実装 今回自作したconfig/words.phpは以下の通りです。 words.php <?php return [ 'fruits' => [ 'apple' => ['APPLE' => 'りんご'], 'banana' => ['BANANA' => 'ばなな'], 'grape' => ['GRAPE', 'ぶどう'], ], 'snack' => [ 'chips' => [ 'potato' => ['POTATO' => 'ポテトチップス'], 'sweetPotato' => ['SWEET POTATO' => 'さつまいもチップス'], ], 'gumi' => [ 'soft' => ['SOFT' => 'やわらかいグミ'], 'hard' => ['HARD' => 'ハードグミ'], ] ], ]; この中から値を取得するためには、PHPのビルトイン関数であるkey()とLaravelのヘルパ関数であるconfigの2つを使用して取得できます。 ControllerやModelなどで下記のようなコードを記述することで、config/words.phpのデータを取得することができます。 今回は例として、Controller内で取得しています。 ※適当に作成したConfigCheckControllerで動作確認を行っております。 ConfigCheckController.php <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ConfigCheckController extends Controller { public function index() { // BANANA と出力される $keyTest1 = key(config('words.fruits.banana')); // SWEET POTATO と出力される $keyTest2 = key(config('words.snack.chips.sweetPotato')); // ばなな と出力される $valueTest1 = config('words.fruits.banana.BANANA'); // さつまいもチップス と出力される $valueTest2 = config('words.snack.chips.sweetPotato.SWEET POTATO'); // 取得確認用 dd($keyTest1, $keyTest2, $valueTest1, $valueTest2); return view('welcome'); } } しっかり取得できましたか? 最後に 少しでも役に立った!という時は、LGTMをポチッと、、、笑 1つでもLGTMが付くとその日がハッピーになるんです! 役に立たなかった時は、怒らないでコメント頂けると幸いです笑 Twitterもやってます! プログラミングや金融知識について、エンジニアの現実についてつぶやいています! よかったら見てみてくださいね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel6 Userモデルに紐づくPolicyを作成(マイページ用)

こんにちは、くりぱんです。 説明 マイページの実装時に、ログインユーザー以外のユーザー情報を変更できないようにする処理を実装したので、メモ程度に残しておきます。 URLのID番号変えると編集できちゃうとかのあれですね! この記事で実現できること ユーザーモデルに紐づくPolicyの作成 アクセス制限 開発環境 OS:MacOS PHP:7.3 Laravel6 実装 下記コマンドでUserPolicyを作成 $ php artisan make:policy UserPolicy Policyの中身を整えて行きます。 ログインユーザーのIDと編集しようとしているマイページの所有ユーザーIDを見比べるようにしています。 app/Policies/UserPolicy.php namespace App\Policies; use App\Models\User; use Illuminate\Auth\Access\Response; use Illuminate\Auth\Access\HandlesAuthorization; class UserPolicy { use HandlesAuthorization; /** * Create a new policy instance. * * @return void */ public function __construct() { // } /** * マイページアクセス制限 */ public function ctrlMyPage(User $user, User $model) { return $user->id === $model->id ? Response::allow() : Response::deny(); } } 今回私は、app/Models配下にユーザーモデルを配置しているので、AuthServiceProvider.phpへPolicyの登録を行います。 ※ポリシーの自動検出機能がありますが、今回の場合は該当しないため app/Providers/AuthServiceProvider.php <?php namespace App\Providers; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; use App\Models\User; // ここを追加 use App\Policies\UserPolicy; // ここを追加 class AuthServiceProvider extends ServiceProvider { /** * The policy mappings for the application. * * @var array */ protected $policies = [ User::class => UserPolicy::class, // ここを追加 ]; /** * Register any authentication / authorization services. * * @return void */ public function boot() { $this->registerPolicies(); // } } 最後にコントローラを少し変えていきます。 今回は下記の3つのメソッドの中に必要な処理を追記していきます。 Show(マイページ表示) Edit(ユーザー情報編集ページ) Update(ユーザー情報編集処理) の全てのメソッドにアクセス制限を実装していきます。 app/Http/Controllers/MyPageController.php <?php namespace App\Http\Controllers; use App\Http\Requests\UpdateMyPageRequest; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Models\User; class MyPageController extends Controller { public function __construct() { // $this->middleware('can:ctrlMyPage,user')->only('show'); } /** * ユーザー情報表示 * * @return view */ public function show() { // ログインユーザー情報取得 $user = Auth::user(); // ポリシー設定 $this->authorize('ctrlMyPage', $user); // ユーザー情報表示 return view('my_pages.show', compact('user')); } /** * ユーザー情報編集画面表示 * * @param Int $id * * @return view */ public function edit(Int $id) { // ユーザー情報 $user = User::find($id); // ポリシー設定 $this->authorize('ctrlMyPage', $user); // ユーザー情報編集ページへ return view('my_pages.edit', compact('user')); } /** * ユーザー情報編集処理 * * @param UpdateMyPageRequest $request * @param Int $id * * @return redirect */ public function update(UpdateMyPageRequest $request, Int $id) { // ユーザー情報取得 $user = User::find($id); // ポリシー設定 $this->authorize('ctrlMyPage', $user); // 編集処理実行 $user->fill($request->all())->save(); // ユーザー情報表示 return redirect()->route('mypage.show')->with('flash_message', '変更が完了しました。'); } } // ポリシー設定 $this->authorize('ctrlMyPage', $user); ここで編集しようとしているユーザーの情報を渡しています。 Showメソッドの場合、ログインユーザーの情報を渡しているので、おそらくPolicyの設定は不要なのですが、一応実装しています。 いらないと思えば、外しても問題なさそうです。 これで実装自体は終わりなので、他の人のマイページに飛べるかどうか試してみてください! Forbiddenが出ていればOKです! 最後に 少しでも役に立った!という時は、LGTMをポチッと、、、笑 1つでもLGTMが付くとその日がハッピーになるんです! 役に立たなかった時は、怒らないでコメント頂けると幸いです笑 Twitterもやってます! プログラミングや金融知識について、エンジニアの現実についてつぶやいています! よかったら見てみてくださいね!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

APIベースで管理画面作っててBasic認証つけたらsafariで・・・

変なわかりにくいタイトルつけてしましました。 この問題が起きた経緯です。 今風にヘッドレスで管理画面つくる フロントはVueでバックエンドはLaravel ログインはJWTでやるよ! Authorization: Bearer xxxxxxでAxiosでおくるよ 実装できたよ 管理画面全体にセキュリティのためにBasic認証かけてほしいよ .htaccessで管理画面領域だけかけたよ。APIにはかけてないよ (WebもAPIも同じドメイン) safariだけ管理画面の挙動がおかしいよ ってな感じになりました。 要は以下にかかれていることですね。↓ これは罠でした。 対処法は何かいいのがあるかもなのですが、ない場合、APIのトークンはAuthorizationを使わずカスタムヘッダー使うか、パラメータにいれるかですかね。やだやだ。 管理画面はBasic認証つけてとかなりがちなので、Vueとかでヘッドレスな開発をしている場合は、気をつけましょう。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのルーティング

ルーティング(web.php) /アプリ名/routes/web.php ルートパスを指定 <?php Route::get('/', function () { return 'シンプルなルーティング!'; }); ルートパス/other/のパスを指定 <?php Route::get('/other', function () { return 'ここは/otherです。'; }); /アプリ名/resources/views/samples/blade_example.blade.phpのパスを指定 <?php Route::get('/blade_example', function(){ return view('samples.blade_example'); }); blade_example/パスを指定する resources/viewディレクトリの samplesディレクトリの blade_example.blade.phpファイル が呼び出される
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む