20210917のlaravelに関する記事は13件です。

タイトル

テスト本文
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

タイトル

テスト本文
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel 419エラー

laravelでvue.jsを使っていて localstorageからデータを読み取って自動ログインするようにしているが、 なぜか 419エラーが頻発してログアウトしちゃう。 csrfが悪さしてるみたい。 その場合の対象方法。 36行目らへんの以下の行をコメントアウトすればOK app/Http/Kernel.php protected $middlewareGroups = [ 'web' => [ // \App\Http\Middleware\VerifyCsrfToken::class, ], ]; 以上
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DB:beginTransaction();ってなに?

Eloquent使わないときにDB保存の記述どうするのか Laravelのcontrollerでmaigrationを使わず 直接DBにアクセス(保存)する記述。 migrationファイルを使用していないケースの時使う Eloquentを使うと下記のように書けるけど 例:$post->save(); 上記記述が有効でない場合下記の書き方ができる。 DB:beginTransaction(); try {   //略 DB::commit(); return ... } catch (Exception $e) { //略 DB::rollback(); return ... } DB:commitって何? migrationのコミット?ロールバックはもともとはここから来ていたのですかね DB:beginTeansaction(); 直訳するとDB:取引開始 なのでここからDB接続しますということ DB:commit(); DBへ内容を反映させる 当たり前ですが、コードは上から順番に読み込まれるので この記述が呼ばれるとDBへ反映される。 DB:rollback(); DBへの処理は行われずなかったことに END
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelで作られた掲示板に機能を追加する②

Laravelで作られた掲示板に機能を追加する①の続きです。 目標 breezeを導入しログイン機能を実装 ログイン/非ログインで表示を変更する リダイレクト先の変更 ログアウト機能の実装 1. breezeを導入しログイン機能を実装 このサイトを参考にし、breezeをインストールします。 $ composer require laravel/breeze --dev 備忘録的なエラー記録 php artisan breeze:installすると Please execute the "npm install && npm run dev" command to build your assets.というエラーがでるので、 npm install && npm run devしてみると bash: npm: command not foundがでたので $ apt-get install -y npm してみたら色々インストールされたので $ npm install && npm run dev で、インストール成功すると下記が表示されます。 $ node -v $ npm -v で両方ともバージョンが表示され、インストールされていることが確認できました。 http://localhost:8000/ にアクセスすると右上にLogin Registerが表示されていました。やったね。 ルーティングの復旧 breezeをインストールするとweb.phpが上書きされていたので、必要な部分のみ復旧します。 routes\web.php <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\PostsController; use App\Http\Controllers\CommentsController; Route::get('/', function () { return view('welcome'); }); Route::get('/dashboard', function () { return view('dashboard'); })->middleware(['auth'])->name('dashboard'); require __DIR__.'/auth.php'; Route::resource('/bbs', PostsController::class)->parameter('bbs', 'post')->only([ 'index', 'show', 'create', 'store', 'edit', 'update', 'destroy' ]); Route::resource('/comment', CommentsController::class)->only([ 'store' ]); viewファイルの編集 localhostにアクセスするとLogin Registerが表示されているので、それを/bbsにアクセスした時にも表示するようにします。 赤枠の部分が、LaravelPjtBBSにあればいいなという感じです。 resources\views\layout\bbsheader.blade.php <div class="container"> <a class="navbar-brand" href="{{ url('/bbs/') }}">LaravelPjt BBS</a> </div>    ↓ 変更 ↓ <div class="container"> <a class="navbar-brand" href="{{ url('/bbs/') }}">LaravelPjt BBS</a> @if (Route::has('login')) <div class="navbar-brand sm:block"> @auth <div>{{ Auth::user()->name }}</div> @else <a href="{{ route('login') }}" class="text-sm text-gray-700 underline">Log in</a> @if (Route::has('register')) <a href="{{ route('register') }}" class="ml-4 text-sm text-gray-700 underline">Register</a> @endif @endauth </div> @endif </div> resources\views\welcome.blade.phpをほぼコピペしています。 cssは好みでカスタマイズすればいいので、とりあえずclassはコピペしたまんまを使います。 Log inかRegisterでログインした場合はdashboardでログアウトをして、URLを/dashboardから/bbsに変更します。 右上にLog in Registerが表示されているはずです。 2. ログイン/非ログインで表示を変更する 次に非ログイン時は、新規投稿や編集をさせないように該当箇所を表示しないようにします。 /bbsのページ 新規作成ボタンを非表示 編集ボタンを非表示 削除ボタンを非表示 詳細ページ 編集ボタンを非表示 削除ボタンを非表示 コメント入力欄を非表示 resources\views\bbs\index.blade.php (略) // 新規作成ボタンを非表示 @section('content') <div class="mt-4 mb-4"> <a href="{{ route('bbs.create') }}" class="btn btn-primary"> 投稿の新規作成 </a> </div> @if (session('poststatus')) <div class="alert alert-success mt-4 mb-4"> {{ session('poststatus')}} </div> @endif ↓ 変更 ↓ @section('content') @if (Route::has('login')) @auth <div class="mt-4 mb-4"> <a href="{{ route('bbs.create') }}" class="btn btn-primary"> 投稿の新規作成 </a> </div> @if (session('poststatus')) <div class="alert alert-success mt-4 mb-4"> {{ session('poststatus')}} </div> @endif @endauth @endif (略) // 編集と削除ボタンを非表示 <p><a href="{{ action('App\Http\Controllers\PostsController@edit', $post->id) }}" class="btn btn-info btn-sm">編集</a></p> <p> <form method="POST" action="{{ action('App\Http\Controllers\PostsController@destroy', $post->id) }}"> @csrf @method('DELETE') <button class="btn btn-danger btn-sm">削除</button> </form> </p>           ↓ 変更 ↓ @if (Route::has('login')) @auth <p><a href="{{ action('App\Http\Controllers\PostsController@edit', $post->id) }}" class="btn btn-info btn-sm">編集</a></p> <p> <form method="POST" action="{{ action('App\Http\Controllers\PostsController@destroy', $post->id) }}"> @csrf @if (Route::has('login')) @auth @method('DELETE')![スクリーンショット (33) - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485388/7c3a35e6-832b-4a2d-790a-98c9d9b8a834.png) <button class="btn btn-danger btn-sm">削除</button> @else @endauth @endif </form> </p> @endauth @endif これで画像のように新規作成や編集と削除は表示されなくなったはずです。 resources\views\bbs\show.blade.php // 編集と削除ボタンを非表示 (略) <!-- 編集・編集ボタン --> <div class="mb-4 text-right"> <a href="{{ action('App\Http\Controllers\PostsController@edit', $post->id) }}" class="btn btn-info"> 編集する </a> <form style="display: inline-block;" method="POST" action="{{ action('App\Http\Controllers\PostsController@destroy', $post->id) }}" > @csrf @method('DELETE') <button class="btn btn-danger">削除する</button> </form> </div>     ↓ 変更 ↓ <!-- 編集・編集ボタン --> @if (Route::has('login')) @auth <div class="mb-4 text-right"> <a href="{{ action('App\Http\Controllers\PostsController@edit', $post->id) }}" class="btn btn-info"> 編集する </a> <form style="display: inline-block;" method="POST" action="{{ action('App\Http\Controllers\PostsController@destroy', $post->id) }}" > @csrf @method('DELETE') <button class="btn btn-danger">削除する</button> </form> </div> @else @endauth @endif // コメント入力欄を非表示     (略) <form class="mb-4" method="POST" action="{{ route('comment.store') }}"> @csrf <input name="post_id" type="hidden" value="{{ $post->id }}" > <div class="form-group"> <label for="subject"> 名前 (略) コメントする </button> </div> </form>     ↓ 変更 ↓ @if (Route::has('login')) @auth <form class="mb-4" method="POST" action="{{ route('comment.store') }}"> @csrf <input name="post_id" type="hidden" value="{{ $post->id }}" > <div class="form-group"> <label for="subject"> 名前 (略) コメントする </button> </div> </form> @endauth @endif 長々と書きましたが、結局は下記のようにif文で囲っただけです。 @if (Route::has('login')) @auth        ログイン時に表示したい内容 @endauth @endif 3. リダイレクトの変更 ログインするとdashboardに飛ばされるので、bbsに飛ぶように修正します。 ついでいログアウトのリダイレクト先もbbsに変更します。 app\Http\Controllers\Auth\AuthenticatedSessionController.php public function destroy(Request $request) { Auth::guard('web')->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return redirect('/bbs'); // ← return redirect('/')から変更 } app\Http\Controllers\Auth\AuthenticatedSessionController.php class RouteServiceProvider extends ServiceProvider { /** * The path to the "home" route for your application. * * This is used by Laravel authentication to redirect users after login. * * @var string */ public const HOME = '/bbs'; // ← return redirect('/dashboard')から変更 4. ログアウト機能の実装 Registerから新規登録(既にアカウントを作った方はLog in)してください。 ログインすると画面右上に名前が表示されているます。 今から画像のように名前の右側にLog Outリンクを作ります。 (本当はdashboardのように名前をクリックするとlog outが表示されるようにしたかったのですが、上手くいきませんでした) パターン1 formのclass="mb-0"はformがmargin bottomを持っていてレイアウトが崩れたので、それを打ち消すためです。 resources\views\layout\bbsheader.blade.php @if (Route::has('login')) <div class="navbar-brand sm:block"> @auth <div class="row"> <div class="text-sm text-gray-700 underline">{{ Auth::user()->name }}</div> <div class="ml-4 text-sm text-gray-700 underline"> <form class="mb-0" method="POST" action="{{ route('logout') }}"> @csrf <a href="route('logout')" onclick="event.preventDefault(); this.closest('form').submit();"> {{ __('Log out') }} </a> </form> </div> </div> @else ちなみに上記のコードはdashboard(というかnavigation)のlog out部分(下記)を参考にして書き直しました。 resources\views\layouts\navigation.blade.php <!-- Authentication --> <form method="POST" action="{{ route('logout') }}"> @csrf <x-dropdown-link :href="route('logout')" onclick="event.preventDefault(); this.closest('form').submit();"> {{ __('Log Out') }} </x-dropdown-link> </form> パターン2 多分よろしくない書き方なのですが、こういう書き方でも動作したので記載しておきます。 resources\views\layout\bbsheader.blade.php @if (Route::has('login')) <div class="navbar-brand sm:block"> @auth <div class="row"> <div class="text-sm text-gray-700 underline">{{ Auth::user()->name }}</div> <div class="ml-4 text-sm text-gray-700 underline"><a href="{{ route('logout') }}">Log out</a></div>              // こちらでも動きます <!-- <div class="ml-4 text-sm text-gray-700 underline"> @csrf <form class="mb-0" method="POST" action="{{ route('logout') }}"> <a href="{{ route('logout') }} ">Log out</a> </form> </div> --> </div> @else bladeの変更だけだとThe GET method is not supported for this route. Supported methods: POST.が出るので、ルーティングを追記します。 Laravel 5.xの頃から下記の修正方法があったようです。 routes\auth.php Route::get('/logout', [AuthenticatedSessionController::class, 'destroy']); // ←Route::postの上に追記 Route::post('/logout', [AuthenticatedSessionController::class, 'destroy']) ->middleware('auth') ->name('logout'); 参考サイト https://qiita.com/kuroudoart/items/44eca2150f102ba7fdb4 https://dev.classmethod.jp/articles/try-using-auth0-with-php-laravel/ これでBreezeを用いたログイン機能が出来ました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel コントローラをtinkerから実行する

tinkerからコントローラを実行できると便利なので、その方法をご紹介します。 環境 PHP: 8.0.10 Laravel: 8.58.0 モデル、コントローラを作る $ php artisan make:model Book $ php artisan make:controller BookController app/Models/Book.php app/Http/Controllers/BookController.php index: 引数なしのメソッドを実行する app/Http/Controllers/BookController.php <?php declare(strict_types=1); namespace App\Http\Controllers; use App\Models\Book; use Illuminate\Http\Request; final class BookController extends Controller { /** * @return array */ public function index(): array { return [ 'data' => [ 'id' => 1, 'name' => 'PHP Book', ] ]; } } だいぶ適当な関数ですが、これをtinkerから実行してみます。 $ php artisan tinker >>> $controller = app()->make(\App\Http\Controllers\BookController::class); => App\Http\Controllers\BookController {#3449} >>> app()->call([$controller, 'index']); => [ "data" => [ "id" => 1, "name" => "PHP Book", ], ] コントローラをtinkerから実行できました! store: Requestオブジェクトのあるメソッドを実行する app/Http/Controllers/BookController.php <?php declare(strict_types=1); namespace App\Http\Controllers; use App\Models\Book; use Illuminate\Http\Request; final class BookController extends Controller { /** * @param Request $request * @return array */ public function store(Request $request): array { return [ 'data' => $request->all(), ]; } } Request オブジェクトが必要な時の例です。 $ php artisan tinker >>> $params = ['name' => 'Laravel Book']; => [ "name" => "Laravel Book", ] >>> $request = \Illuminate\Http\Request::create('/books', 'POST', $params); => Illuminate\Http\Request {#3452 +attributes: Symfony\Component\HttpFoundation\ParameterBag {#3448}, +request: Symfony\Component\HttpFoundation\InputBag {#3450}, +query: Symfony\Component\HttpFoundation\InputBag {#3449}, +server: Symfony\Component\HttpFoundation\ServerBag {#3441}, +files: Symfony\Component\HttpFoundation\FileBag {#3440}, +cookies: Symfony\Component\HttpFoundation\InputBag {#3446}, +headers: Symfony\Component\HttpFoundation\HeaderBag {#3444}, } >>> $controller = app()->make(\App\Http\Controllers\BookController::class); => App\Http\Controllers\BookController {#3442} >>> app()->call([$controller, 'store'], ['request' => $request]); => [ "data" => [ "name" => "Laravel Book", ], ] show: Bookオブジェクトのあるメソッドを実行する app/Http/Controllers/BookController.php <?php declare(strict_types=1); namespace App\Http\Controllers; use App\Models\Book; use Illuminate\Http\Request; final class BookController extends Controller { /** * @param Book $book * @return array */ public function show(Book $book): array { return [ 'data' => [ 'id' => $book->id, 'name' => $book->name, ], ]; } } Book モデルのオブジェクトが必要な時の例です。 $ php artisan tinker >>> $book = \App\Models\Book::factory()->make(['id' => 1, 'name' => 'PHP Book', 'created_at' => now(), 'updated_at' => now()]); => App\Models\Book {#4379 id: 1, name: "PHP Book", created_at: "2021-09-01 00:00:00", updated_at: "2021-09-01 00:00:00", } >>> $controller = app()->make(\App\Http\Controllers\BookController::class); => App\Http\Controllers\BookController {#4384} >>> app()->call([$controller, 'show'], ['book' => $book]); => [ "data" => [ "id" => 1, "name" => "PHP Book", ], ] 今回はDB作ってないので、Book::factory() でBookインスタンスだけ作ってます。 DBがある場合は $book = \App\Models\Book::find(1); 等でBookインスタンス取得してください。 参考 https://mellowhost.com/blog/how-to-call-a-controller-method-from-tinker-laravel.html https://gist.github.com/nasirkhan/809eee36875dc7c1935bc4289be214c6
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelで作られた掲示板に機能を追加する①

Laravelの勉強の備忘録です Laravelの勉強のためにこのサイトの【Laravel】掲示板を作成する(1)~(7)をなぞりながら掲示板を作りました。 記事を書かれた方にこの場を借りてお礼申し上げます。 そしてLaravel技術力アップのため、この掲示板に機能を追加していきます(本記事の内容) 環境 前提条件:【Laravel】掲示板を作成する(1)~(7)をLaravel 8で作り終えていること。 Windows 10 Laravel 8(※掲示板を作成された方の環境はLaravel 5.8のようですが、8で作っています) Docker 目標 Userデータを作成し、UserとPostやCommentのリレーションを設定する Fakerを使いUserのダミーデータを作成 PostとCommentテーブルのnameカラム名削除をし、user_idカラムを作成 Userとのリレーションの設定を行う viewの変更 検索の修正 Fakerを使いUserのダミーデータを作成 Userのダミーデータを作成します。 UserモデルとUserFactoryは仕様で作成されているので、Seederを作成します。 $ php artisan make:seeder UsersTableSeeder ダミーデータをとりあえず5つ作成 database\seeds\UsersTableSeeder.php <?php namespace Database\Seeders; use Illuminate\Database\Seeder; use App\Models\User; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { User::factory(5)->create(); } } パスワードの記述の変更 database\factories\UserFactory.php public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 'remember_token' => Str::random(10), ]; }   ↓ 変更 ↓  public function definition() { return [ 'name' => $this->faker->name(), 'email' => $this->faker->unique()->safeEmail(), 'email_verified_at' => now(), 'password' => bcrypt('password'), 'remember_token' => Str::random(10), ]; } ダミーユーザーを5つ作ったので、PostsとCommentsテーブルのuser_id(後ほど作成)に1~5の数字をランダムに流し込むために内容を変更します。 database\factories\PostFactory.phpとdatabase\factories\CommentFactory.php(2つとも記述方法が同じ) public function definition() { return [       (略) // 'name' => $this->faker->name, // 氏名       // ↓↓ 変更 'user_id' => $this->faker->numberBetween(1,5),       (略) ]; seederを流し込むための記述を追記します。 database\seeders\DatabaseSeeder.php public function run() { $this->call(UsersTableSeeder::class); // ← リレーションの関係でPostsTableSeederより上に追記 $this->call(PostsTableSeeder::class); } PostとCommentテーブルの内容を変更 nameカラムを削除し、user_idを追加します。 Laravelはデフォルトではカラム名の変更はできないらしいので、Doctrine DBALをインストールします。 (カラム名を変更していないので、Doctrine DBALはインストールしなくてもいいかもしれません) $ composer require doctrine/dbal postsとcommentsテーブルのnameカラムを削除し、user_idカラムを作成するためのマイグレーションファイルの作成を行います。 (1)nameカラム削除用のmigrationファイルの作成 とりあえずわかりやすいかなと思う名前で作成。 $ php artisan make:migration drop_name_column_from_posts_table --table=posts $ php artisan make:migration drop_name_column_from_comments_table --table=comments 最初はdrop_column_name_columnにしようとしました。 しかし、posts作成後にcomments分を作成しようとしたところ、既にファイルが存在しているとエラーがでたため、上記のような書き方にしました。 (2)nameカラム削除用のmigrationファイルへの記述 drop_name_column_from_posts_table.phpとdrop_name_column_from_comments_table.php(2つとも記述方法が同じ) public function up() { Schema::table('comments', function (Blueprint $table) { $table->dropColumn('name'); //カラムの削除 }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('comments', function (Blueprint $table) { $table->string('name'); //カラム追加 }); } (3)nameカラム削除用のmigrationファイルの反映 $ php artisan migrate down処理の検証をしたい場合は、 php artisan migrate:rollback --step=2 とやって、カラムが巻き戻っているかを確認すればいいと思います。というか、した方がいいです。 (4)user_idカラム追加用のmigrationファイルの作成 $ php artisan make:migration add_user_id_to_posts_table --table=posts $ php artisan make:migration add_user_id_to_comments_table --table=comments (5)user_idカラム追加用のmigrationファイルへの記述 Usersテーブルのidを確認したところ、タイプがbigint、属性がunsignedだったのでunsignedBingIntegerで作成します。 add_user_id_to_posts_table.php public function up() { Schema::table('posts', function (Blueprint $table) { $table->unsignedBigInteger('user_id'); //カラム追加 $table->foreign('user_id')->references('id')->on('users'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { $table->dropForeign('posts_user_id_foreign'); $table->dropColumn('user_id'); }); } add_user_id_to_comments_table.php public function up() { Schema::table('comments', function (Blueprint $table) { $table->unsignedBigInteger('user_id'); //カラム追加 $table->foreign('user_id')->references('id')->on('users'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('comments', function (Blueprint $table) { $table->dropForeign('comments_user_id_foreign'); $table->dropColumn('user_id'); }); } リレーション設定のために内容に変更や追記をします。 app\Models\User.php public function posts() { return $this->hasMany('App\Models\Post'); } public function comments() { return $this->hasMany('App\Models\Comment'); } app\Models\Comment.php protected $fillable = [ 'post_id', 'user_id', // 'name'から変更 'comment', ]; public function user() // 追記 { return $this->belongsTo('App\Models\User'); } app\Models\Post.php protected $fillable = [ 'user_id', // 'name'から変更 'subject', 'message', 'category_id' ]; public function user() // 追記 { return $this->belongsTo('App\Models\User'); } これでseederとリレーションが出来たので、ダミーデータを流し込みます。 $ php artisan migrate:refresh --seed viewの編集 今まではpostsテーブルのnameカラムを参照していました。 しかし、nameカラムを削除し、user_idを参照するようになったので、内容を変更します。 index.blade.php <td>{{ $post->name }}</td>          ↓ 変更 ↓ <td>{{ $post->user->name }}</td> edit.blade.php value="{{ old('name') ?: $post->name }}"              ↓ 変更 ↓ value="{{ old('name') ?: $post->user->name }}" 上記の記述にするとちゃんと名前が表示されるようになりました。 検索の修正 テーブルの構造を変えたので、検索をしても名前がひっかからなくなりました。 ですので、検索対象のカラムを変更します。 postsテーブルのmessegeカラム postsテーブルのnameカラム ↓ postsテーブルのmessegeカラム usersテーブルのnameカラム app\Models\Post.php public function scopeFuzzyNameMessage($query, $searchword) {    (略) return $query->where(function ($query) use($searchword) { $query->orWhere('name', 'like', "%{$searchword}%") ->orWhere('message', 'like', "%{$searchword}%"); }); }   ↓ 変更 ↓ public function scopeFuzzyNameMessage($query, $searchword) {    (略) $user_ids = User::where('name', 'like', "%{$searchword}%")->pluck("id"); $query->whereIn('user_id', $user_ids) ->orWhere('message', 'like', "%{$searchword}%"); return $query; } まずuser_idsに検索ワードと一致したusersテーブルのnameカラムと一致するidをぶち込みます。 whereInを使っている理由は、user_idsはpluckメソッドを使っていて配列が入っています。そのためwhereIn()を使うのが適しているらしいからです。 この修正を行った後に検索をすると、名前とメッセージに一致している記事を拾ってきてくれるようになります。 続きは、Laravelで作られた掲示板に機能を追加する②にて!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel8 hasManyThroughの使い方

Lrravelの学習中、hasManyThroughを使う機会があったので備忘録としてここに残す。 使用例 例えばあるユーザーが書いた記事にされているブックマークを取得したい場合、関係性は以下になる。 User→Article→Bookmark ここではそれぞれ、Userを始点、Articleを中継先、Bookmarkを取得先とし、以下の記述となる。 //Userモデル内 public function getBookmarked() { return $this->hasManyThrough( 'App\Models\Bookmark', //取得先 'App\Models\Article', //中継先 'author_id', //始点と中継先をつなぐ外部キー 'article_id', //中継先と取得先をつなぐ外部キー 'id', //始点の主キー(省略可) 'id' //中継先の主キー(省略可) ); } 第5、第6引数は主キー名が'id'なら省略出来る。よってこれらの引数を入れるのは主キー名を変えている場合のみ。 初心者のため、内容に相違あればコメント下さい。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Homesteadでプロジェクトを複数もつ時。

Homestead.yamlのsites部分に追加します。 sites: - map: homestead.test to: /home/vagrant/code/自分のプロジェクト名/public #- map: homestead.test # to: /home/vagrant/code/自分のプロジェクト名/public # - map: homestead.test # to: /home/vagrant/code/自分のプロジェクト名/public 3つのプロジェクトを同じhomesteadに保管する場合、実際にローカルで確認したいもの以外を#でコメントアウトします。 変更後は必ずターミナルで、 vagrant reload --provision してください。変更が反映されません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

POST http://localhost/broadcasting/auth 404 (Not Found) error reason two possible causes.

reason 1 window.Echo = new Echo( { broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, forceTLS: true, //+ authEndpoint : '/laravel_echo/public/broadcasting/auth', }, ); reason 2 config\app.php // App\Providers\BroadcastServiceProvider::class, //↓ App\Providers\BroadcastServiceProvider::class,
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

POST http://localhost/broadcasting/auth 404 (Not Found) error

動作環境 laravel8 エラーメッセージ POST http://localhost/broadcasting/auth 404 (Not Found) Pusher : Couldn't retrieve authentication info. 404Clients must be authenticated to join private or presence channels エラー対処方法(エラー発生条件) reason 1 window.Echo = new Echo( { broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, forceTLS: true, //+ authEndpoint : '/xxxxxxxxxxx/public/broadcasting/auth', }, ); reason 2 config\app.php // App\Providers\BroadcastServiceProvider::class, //↓uncomment App\Providers\BroadcastServiceProvider::class,
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Docker+Laravel】よく使うコマンド集

Laravelのバージョン確認 php artisan --version or php artisan -V キャッシュ削除 applicationキャッシュクリア php artisan cache:clear routeキャッシュクリア php artisan route:clear configキャッシュクリア php artisan config:clear viewキャッシュクリア php artisan view:clear 定義されているルーティング一覧を確認 php artisan route:list デバッグ ファイルに出力して、デバッグや変数の内容を確認 logger()->debug($hoge); メソッド一覧 メソッド 内容 emergency システムが使用不可なレベル alert 緊急に対処すべきレベル critical 致命的なエラーレベル error 一般的なエラーレベル warning 警告レベル notice 通知レベル info システム情報レベル debug デバッグ情報レベル 作成中に変数の値を確認(web上で確認) dd($hoge);
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel基礎】リレーション

はじめに  Laravelでリレーションはちょっと特殊な書き方をします。備忘録として残しておきます。   雑多なメモ書きという感じですがご容赦ください。 Laravelでリレーション  Laravelのリレーションはモデルに書くことで定義できます。 ・1対1 ・1対多 ・多対多 この3パターンで書き方が異なってきます。 1対1  例えば、ケータイは基本的に一人につき一つです。(複数台持ちはここでは無視してください。) まずはテーブルを作ります。 phoneテーブルには外部キーであるuser_idを持たせています。そしてモデルで下記のように定義します。 User.php public function phone(){ return $this->hasOne('App\Models\Phone'); } Phone.php public function user(){ return $this->belongsTo('App\Models\User'); } これで1対1のリレーションをはることが出来ました。 1対多  1対多の場合も基本的な考え方は変わりません。 例えば、SNSの投稿機能などでは、ユーザー一人につき投稿は複数あります。 まずはテーブルを作成します。 やはりpostsテーブルには外部キーであるuser_idが必要です。 モデルは下記のようになります。 User.php public function posts(){ return $this->hasMany('App\Models\Post'); } Post.php public function user(){ return $this->belongsTo('App\Models\User'); } このように書きます。 終わりに これで、userを取得してそれぞれで定義したメソッドを使えばリレーション関係にあるphoneやpostsを引っ張ってくることが出来ます。  多対多はまた少し違うので今回は割愛します。←
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む