20210506のlaravelに関する記事は6件です。

laravel sailで簡単に実行環境を作る

laravelを動かす環境はHomestead,laradockなど色々ありますが、sailってどんなもんだろうということで使ってみました。 構築環境: macOS BigSur 11.2.3 Docker version 20.10.0, build 7287ab3 docker-compose version:1.27.4, build 40524192 sailインストール方法 2つ方法がある 方法1.curlコマンドによるプロジェクト作成+sail環境作成 プロジェクト作成と一緒にsail環境も入れたい場合はcurlインストールで作成できる # withパラメタ指定がない場合は`mysql,redis,meilisearch,mailhog,seleniu`がデフォルト $ curl -s "https://laravel.build/アプリ名" | bash # with引数を指定することで一緒にインストールするものを選べる(指定できるワードは方法2参照) $ curl -s "https://laravel.build/アプリ名?with=pgsql,memcached" | bash 方法2. 既にあるlaravelプロジェクトにcomposer requireしてsail環境作成 create-project済みの環境にインストールする場合はこちら # プロジェクトに移動してcomposer require $ composer require laravel/sail --dev # 必要な環境を以下コマンドで作成する $ php artisan sail:install # 以下のようなメッセージが表示されるので必要な機能を`,`区切りで入力する Which services would you like to install? [mysql]: [0] mysql [1] pgsql [2] mariadb [3] redis [4] memcached [5] meilisearch [6] mailhog [7] selenium > 1,4 # 間違った場合は再度`php artisan sail:install`すれば良い 2つのインストール方法に違いはある? 違いがあるかな?ということで2つのプロジェクトをdiffしてみたところ以下の違いがあった .env 設定 curl install composer require APP_KEY 設定済み 未設定 APP_URL プロジェクト名.test localhost DB_DATABASE プロジェクト名 laravel これはsailというよりcurlインストール方式の違いだと思う composer requireはAPP_KEYが未設定なのでphp artisan key:generateしないと動かせないので注意 composer.json 設定 curl install composer require larave/sail ^1.0.1 ^1.5 composer requireはバージョン指定しなかったので当然ながら最新が入っていた curl installはそもそも設定されたバージョンなのか1.0.1だった どちらの方法でもあとは以下のコマンドでdockerを起動でき、http://localhostで画面が見れる # 起動 (sailコマンドについては後で記載) ./vendor/bin/sail up -d create-projectした際は.envの修正が必要だったがAPP_KEYのみでほぼ触ってないに等しい状態で動かせるのがすごい 以降は方法2で作った環境で確認 sailコマンドについて docker-composeコマンドとは別にsailコマンド覚えなきゃいけないのかなーって思ったら、sail helpするとdocker-composeのヘルプが出る・・・! それに以下のようなコマンドがあり、ほぼdocker-composeと同じように見えた # 起動 ./vendor/bin/sail up -d # 停止 ./vendor/bin/sail down こんな命令をするとホスト側からdocker内にコマンドを流すことも出来た # docker内でmigrate ./vendor/bin/sail artisan migrate # docker内のphp versionを表示 ./vendor/bin/sail php --version sailコマンドってどういうものなの?ということでリポジトリを見てみる(2021/5/5時点) https://github.com/laravel/sail/blob/1.x/bin/sail docker execしてコマンドを流す機能 sailコマンドの引数$1を見て、docker-compose execしてコマンドを流してくれる以下がある。 php,composer,artisan,art,test,dusk,dusk:fails,tinker,node,npm,npx,yarn,mysql,mariadb,pgsql,shell,bash,root-shell,share artisan以外に気になったものだけピックアップすると mysqlとmariadbは同じmysqlコマンドだけどdocker execする名前が違うから別に分けられてる shell,bashは同じ機能 root-shellはroot権限でのbash実行になる docker-composeにコマンドを流す docker execしてコマンドを流してくれる上記以外の場合はそのままdocker-composeコマンドに流すようになっている。(sail helpはこれに該当した) なのでdocker-composeのbuildも使えるので、sailをdocker-composeに読み替えて使うことが出来る alias設定 そんな便利なsailコマンドだけど./vendor/bin/sailを一々打つのは面倒なのでalias設定をしておくと便利 macの場合:~/.zshrcに以下を設定しておく alias sail='bash ./vendor/bin/sail' 結論 さくっと環境を作りたい場合に便利 細かい.envを設定しなくても動かせる環境が出来る sailコマンドによるdocker内にコマンドを流すのが簡単 docker exec -it xxxx bash しなくていいんだ・・・! あまりに簡単に環境が作れるので、これからlaravel学習する人には特におすすめかも。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker X Laravel ハンズオンイベントを主催して分かったことまとめ

イベント DockerでLaravelのローカル環境を構築するハンズオン(オンライン) https://php-builders.connpass.com/event/211985 合計65人の方に参加申し込みいただきました。ありがとうございます? discordのイベントチャンネルも50人以上オンラインになっておりハンズオンにしては大規模な開催となり嬉しく思います。 約12名の方に一緒にハンズオンしていただき、全員ハンズオン成功しました。 PHP Builders(ぴーえっちぴー びるだーず) PHPerによる、PHPerのための、PHPを勉強する勉強会コミュニティです。 教えたい/教わりたい/勉強したい方を歓迎してます! connpass内にDiscordグループの招待リンクがあります。 質問や相談、雑談などもできますので、気軽にご参加ください。 https://php-builders.connpass.com 資料 ハンズオン資料記事: https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4 完成したリポジトリ: https://github.com/ucan-lab/docker-laravel-handson 宣伝 LaravelのOSSパッケージ開発を行なってます。 よければStarいただけると嬉しいです。 https://github.com/ucan-lab/docker-laravel https://github.com/ucan-lab/laravel-dacapo ハンズオン参加レポート ガミネさん(@gaminessium)が参加レポートを書いてくださりました? https://gaminessium.github.io/2021/05/02/laravel-handson-202105 ハンズオン中の問題 ハンズオン中に発生したトラブルをまとめした。 docker compose コマンドがない docker compose コマンドは、docker desktop 3.2.1以降に技術プレビュー版としてリリースされた新しい docker コマンドのサブコマンドです。 Docker for Mac, Docker for Windowsを予めアップデートしておく必要がある。 docker compose down -v がバグってる docker compose は技術プレビュー版のためか名前付きボリュームが削除されないバグがある。 https://github.com/docker/compose-cli/issues/1553 https://github.com/docker/compose-cli/pull/1618 修正済みですが、記事執筆時点(v1.0.14)ではまだリリースされてない模様です。 謎のエラー ハンズオン中にでた謎のエラーです。 実はリハーサルしてて同じエラーが出ていました。結局原因はわからないままですがdocker desktopをrestartすることで解決しました。 【Docker】Error response from daemon: invalid mount config for type "bind": bind source path does not exist マイグレーションでエラー このエラーが出た時は、原因わからなくて少し焦ってたんですがチャットサポートしてくれた方が教えてくださりました。 $ docker compose exec app bash root@28e246f56b19:/work# php artisan migrate Illuminate\Database\QueryException SQLSTATE[HY000] [1130] Host '172.22.0.2' is not allowed to connect to this MySQL server (SQL: select * from information_schema.tables where table_schema = laravel_local and table_name = migrations and table_type = 'BASE TABLE') at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678 674▕ // If an exception occurs when attempting to run a query, we'll format the error 675▕ // message to include the bindings with SQL, which will make this exception a 676▕ // lot more helpful to the developer instead of just the database's errors. 677▕ catch (Exception $e) { ➜ 678▕ throw new QueryException( 679▕ $query, $this->prepareBindings($bindings), $e 680▕ ); 681▕ } 682▕ このエラーが発生した場合は my.cnf を作成する前に docker compose up -d でビルドしてしまった可能性が高いです。 (って自分のハンズオン記事の補足に書いてありました...) $ docker-compose down --volumes $ docker compose build db $ docker compose up -d docker compose down --volumes は名前付きボリュームを削除してくれない問題がある https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4#%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E8%A3%9C%E8%B6%B3 Firefoxでアクセスできない 普段Firefox使ってなかったので知らなかったです。 これはとても勉強になりました。 https://tenforward.hatenablog.com/entry/20070810/1186724991 公開ポート番号を80から8080など別の番号に変更してもアクセスできるみたいです。 ネットワーク回線遅い問題 docker pullやcomposer install等、ネットワーク回線によってなかなか進めない人がいた。 これは各家庭にnuro光を導入してもらうことで解決。 予めdockerイメージをpullしておいたり、ネットワーク使う箇所は質問タイムや解説タイムに使うといいかもしれないです。 雷は防げない 当日は雷の鳴る中のハンズオンイベントとなりました。 雨の音や雷の音が響く中、ハンズオンイベントが進められていました。 何かしらトラブルは起きるだろうと予想していましたが、参加者の中に停電が発生してしまう方がいました。 ノートPCは生きててもルーター落ちたら通信できなくて詰みますね... 質問 ハンズオン中に出た質問をまとめます。 phpMyAdminを入れるにはどうしたらいいか? 今回のハンズオンの対象ではないですが、そんなこともあろうかと記事を書いておきました。 Docker x Laravel phpMyAdmin のコンテナを構築する MySQLのGUIクライアントで接続したいのですがどうしたらいいか? Sequel Proという便利なMySQLのGUIクライアントツールがありますが、MySQL8に対応できていませんでした。 後継アプリのSequel Aceというアプリを紹介している記事があったのでご紹介します。 Sequel AceでMySQLに接続する(Sequel Proの後継) 最小限の環境でLaravelを動かしてみたい docker-compose.yml 1ファイルでLaravel環境を作ることもできます。 webサーバーとdbサーバーなしの構成です。 Docker x Laravel 脅威の1ファイル!最小構成でローカル開発環境を構築する 感想 人数多かった割には大きな問題が起こることなく時間通りにハンズオン進めたのでとてもよかったです。 知らないエラーにも出会えて、私自身もとても勉強になりました。 都合が悪く参加できなかった方もいらっしゃるので、機会があればまたイベントを開催したいと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】お問い合わせフォームに簡易なスパム対策をサクッと実装する

やりたいこと ・必要事項を入力するとメールが送られるお問い合わせフォームを設置したが、スパムメールがたくさん来る。 ・完璧じゃなくて良いので、スパム対策をあまり手をかけずにサクッと実装したい。 ↑こんな感じのごく一般的なお問い合わせフォーム どんなロジックで対策するか? ・スパムを送りつけてくるのは主にスパムbotと呼ばれるもの。 ・このbotは、フォーム内のすべての項目に自動的に入力して送信してくることが多い。 この特性を利用し、まずViewのformタグの中に「非表示の項目」を作り、そこに入力がある場合はスパムと判断し404に飛ばす処理をします。いわゆる簡易なHoneypot保護機能です。 実装手順 ①Viewの実装 まずはViewのフォーム部分に隠し項目を追加します。名前は適当にhoneypotとしていますが、何でも良いです。 今回はFormファサードを使用していますが、htmlのformタグの場合はhidden属性で入力項目を追加します。 _contact_form.blade.php <div id="anchor-contact" class="p-front__contact"> <h3 class="p-front__contact-heading">下記のフォームよりお問い合わせください</h3> {{ Form::open(['method' => 'POST', 'url' => route('common.send')]) }} 〜中略〜 {{ Form::text('honeypot', '', ['style' => 'display:none']) }} <div class="c-button" data-type="contact"> <button type="submit" class="check-button">この内容で送信する</button> </div> </form> </div> ②Controllerの実装 次に、送られてきたリクエストに上記のhoneypotの値があった場合は404に飛ばす処理を追加します。 commonController.php public function send(CommonRequest $request) { if (isset($request->honeypot)) { abort(404); } 〜後略〜 ..と、これだけなのですが以上で実装は完了です。 ディベロッパーツールで隠し項目に適当な項目を入力して送信してみると、404ページに遷移するのが確認できると思います。 以上、最後までお読みいただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel入門

環境 MAMP Laravel 8 PHP 8.0 アプリの作成 $ composer create-project laravel/laravel --prefer-dist アプリ名 $ cd アプリ名 $ chmod -R 777 storage $ chmod -R 777 bootstrap/cache マイグレーションのファイルの生成 $ php artisan make:migration create_テーブル名(複数形)_table マイグレーションのファイル変更 public function up() { if (!Schema::hasTable('blogs')) { //追記 Schema::create('blogs', function (Blueprint $table) { $table->id(); $table->string('title', 100); //追記 $table->text('content'); //追記 $table->timestamps(); }); } } if (!Schema::hasTable('blogs')) => もし、blogsが無かったらテーブルを作る。 $table->string('title', 100); => string型でカラム名をtitle、文字数を100まででカラムを作ります。 データベースに反映させる $ php artisan migrate データベースが作成されているのでphp MyAdminにて確認する。 モデルを作成 $ php artisan make:model (単数形) class Blog extends Model { use HasFactory; //テーブル名 protected $table = 'blog'; //追記 //可変項目 protected $fillable = //追記 [ 'title', 'content' ]; } ルーティングの追加 routes/web.php Route::get('/', 'BlogController@show')->name ('blog'); localhost:8888にアクセスした際にHTTPはgetでBlogController@show`->BlogControllerのshowメソッドが呼ばれる。 コントローラの作成 $ php artisan make:controller BlogController Http/Controller/BlogControier.php class BlogController extends Controller { /** * * @return view */ public function show() { return view('blog.list'); } } return view('blog.list');->views/blog/list.blade.phpを表示させる。 bladeの使い方 簡略的に言うと作成したviewファイルを他のファイルでも表示させる機能です。 書き方は@include('header')や@yield('content')と書きます。 @include('表示したいファイル')注意点は、('相対パスで書く')こと @yield('content')は継承したファイルを表示させることができる。 show.blade.php @extends('layout') //継承する @section('content') //表示させたい範囲 @endsection layout.blade.php <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Laravel_practice</title> <link rel="stylesheet" href="/css/app.css"> <script src="/js/app.js" defer></script> </head> <body> <header> @include('header') //同じ階層のheader.blade.php </header> <div> @yield('content') //継承している@section('content')〜@endsectionまで </div> <footer> @include('footer') //同じ階層のfooter.blade.php </footer> </body> </html> 終わり 筆者は、Railsを学習してからLaravelを学んでいるのですが共通する部分が多く、比較的に学習しやすいです。Larabel学習したばかりですので間違っていたらすみません。PHPはフレームワークの種類が多く学ぶのが大変そうですが、引き続きLaravel頑張ります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelでアプリを作ってみた!【Kataduke】

はじめに 私はプログラミング歴1年の初心者です。 実務でWebサイトのコーディングを1年間行ってきました。 そろそろシステム開発もできるようになりたいということで LaravelやReactをこれから勉強していこうと思っております。 今回の目的は ポートフォリオアプリを作成しようと思います。 Laravelの開発を1から行う gitをCLIで使えるようにする 開発環境は 今回はMAMPを使おうと思います。 デプロイにはHerokuを使います。 設計 機能一覧 画面設計 URL設計 テーブル定義 スプレッドシートで作成してみました。 MAMPで開発環境構築 $ cd /Applications/MAMP/htdocs $ composer create-project laravel/laravel Kataduke $ cd Kataduke MAMPでやること ・PreferencesのServerのDocument rootを「Katadukeのpublic」に設定する ・localhost:8888をURL指定する ・localhost:8888/phpMyAdminをURL指定して、データベースを作成する GitHubに登録する # ローカルリポジトリ作成 $ git init // リポジトリの初期化を行う $ git status // リポジトリ内のステータス状況を確認する $ git config --global init.defaultBranch main // マスターブランチをメインブランチにする $ git add -A // ステージングに追加する $ git commit -m 'first commit' // ステージング上のファイルをリポジトリに追加する # リモートリポジトリを作成 ・ Gitgubで右上の「+」を押下して、「New repository」をクリックする $ git remote add origin <RemoteRipositoryURL> // リモートリポジトリを登録する $ git branch -M main // メインブランチに変更する $ git push origin main // ローカルリポジトリをリモートリポジトリにPushする データベースの設定をする # テキストエディタでデータベースの設定をする DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=8889 DB_DATABASE=Kataduke DB_USERNAME=root DB_PASSWORD=root DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock config/app.php # タイムゾーンと言語の設定をする 'timezone' => 'Asia/Tokyo', 'locale' => 'ja', マイグレーション作成 # gitブランチを切り替える $ git branch create-migration // マイグレーションを作成するブランチ作成 $ git checkout create-migration // マイグレーションを作成するブランチに切り替える # マイグレーションを作成する $ php artisan make:migration create_rooms_table --create=rooms $ php artisan make:migration create_items_table --create=items xxxx_xx_xx_xxxxxx_create_rooms_table.php // 以下のテーブルを作成する public function up() { Schema::create('rooms', function (Blueprint $table) { $table->id(); $table->string('name', 20); $table->integer('size'); $table->integer('status')->default(1); $table->foreignId('user_id')->constrained(); $table->timestamps(); }); } xxxx_xx_xx_xxxxxx_create_items_table.php // 以下のテーブルを作成する public function up() { Schema::create('items', function (Blueprint $table) { $table->id(); $table->string('name', 20); $table->integer('size'); $table->binary('image')->nullable(); $table->string('memo', 400)->nullable(); $table->foreignId('room_id')->constrained(); $table->timestamps(); }); } # マイグレーションファイルを実行する $ php artisan migrate # githubにコミット $ git add -A // ステージングに追加する $ git commit -m 'マイグレーションファイル作成' // ステージング上のファイルをリポジトリに追加する $ git push origin HEAD // リモートにpushする $ git checkout main // mainブランチに移動する $ git pull origin main // リモートからマージしたファイルを取得 アイテムを一覧表示する # gitブランチを切り替える $ git branch create-items_index // マイグレーションを作成するブランチ作成 $ git checkout create-items_index // マイグレーションを作成するブランチに切り替える ○Routingの設定 web.php ○モデルの作成 php artisan make:model Room php artisan make:model Item ○シーダーの作成 php aritsan make:seeder UsersTableSeeder UsersTableSeederの編集 php artisan db:seed --class=UsersTableSeeder php artisan make:seeder RoomsTableSeeder RoomsTableSeederの編集 php artisan db:seed --class=RoomsTableSeeder php artisan make:seeder ItemsTableSeeder ItemsTableSeederの編集 php artisan db:seed --class=ItemsTableSeeder ○コントローラーの設定 php artisan make:controller ItemsController ItemsControllerの編集 ○テンプレートの作成 mkdir resources/views/items touch resources/views/items/index.blade.php index.blade.phpの編集 mkdir public/css touch public/css/styles.css styles.cssの編集 ○モデルにroomsのstatusのアクセサをもたせる Room.phpの編集 ○モデルにリレーションをもたせる Room.phpの編集 ItemsControllerの編集 ルームを作成する # gitブランチを切り替える $ git branch create-rooms_create // マイグレーションを作成するブランチ作成 $ git checkout create-rooms_create // マイグレーションを作成するブランチに切り替える ○Routingの設定 web.php ○コントローラーの設定 php artisan make:controller RoomsController RoomsControllerの編集 ○テンプレートの作成 mkdir resources/views/rooms touch resources/views/rooms/create.blade.php create.blade.phpの編集 ○リクエストの設定(バリデーション) php artisan make:request CreateRoom CreateRoom.phpの編集 ○コントローラーの設定(バリデーション) RoomsController.phpの編集 ○テンプレートの設定(バリデーション) create.blade.phpの編集 ○エラーメッセージを日本語化する mkdir resources/lang/ja cp resources/lang/en/validation.php resources/lang/ja/ lang/ja/validation.phpの編集 config/app.phpの編集 CreateRoom.phpの編集 ○エラーが出た後に入力値を残す create.blade.phpを編集 アイテムを作成する # gitブランチを切り替える $ git branch create-items_create // マイグレーションを作成するブランチ作成 $ git checkout create-items_create // マイグレーションを作成するブランチに切り替える ○Routingの設定 web.php ○コントローラーの設定 ItemsControllerの編集 ○テンプレートの設定 items/create.blade.phpの編集 ○テンプレートの設定(共通テンプレート化) mkdir resources/views/layout.blade.php items/index.blade.phpの編集 items/create.blade.phpの編集 rooms/create.blade.phpの編集 ○リクエストの設定(バリデーション) php artisan make:request CreateItem CreateItem.phpの編集 ○コントローラーの設定(バリデーション) RoomsController.phpの編集 ○テンプレートの設定(バリデーション) create.blade.phpの編集 ルームを編集する # gitブランチを切り替える $ git branch create-rooms_update // マイグレーションを作成するブランチ作成 $ git checkout create-rooms_update // マイグレーションを作成するブランチに切り替える ○Routingの設定 web.php ○コントローラーの設定 RoomsControllerの編集 ○テンプレートの作成 rooms/edit.blade.phpの編集 ○リクエストの設定(バリデーション) php artisan make:request EditRoom EditRoom.phpの編集(CreateRoomの継承) ○コントローラーの設定(バリデーション) RoomsController.phpの編集 ○テンプレートの設定(バリデーション) edit.blade.phpの編集 アイテムを編集する # gitブランチを切り替える $ git branch create-items_update // マイグレーションを作成するブランチ作成 $ git checkout create-items_update // マイグレーションを作成するブランチに切り替える ○Routingの設定 web.php ○コントローラーの設定 ItemsControllerの編集 ○テンプレートの作成 items/edit.blade.phpの編集 ○リクエストの設定(バリデーション) php artisan make:request EditItem EditItem.phpの編集(CreateItemの継承) ○コントローラーの設定(バリデーション) ItemsController.phpの編集 ○テンプレートの設定(バリデーション) edit.blade.phpの編集 ユーザーを認証する # gitブランチを切り替える $ git branch create-users_authenticate // マイグレーションを作成するブランチ作成 $ git checkout create-users_authenticate // マイグレーションを作成するブランチに切り替える ○laravel/uiのインストール composer require laravel/ui php artisan ui vue --auth ○新規登録・ログイン・ログアウト ○モデルの設定 User.phpの編集 ○シーダーの実行 php artisan db:seed --class=UsersTableSeeder php artisan db:seed --class=RoomsTableSeeder php artisan db:seed --class=ItemsTableSeeder ○Routingの設定 web.php ○テンプレートの設定 home.blade.phpの編集 auth/register.blade.phpの編集 auth/login.blade.phpの編集 ○コントローラーの設定(バリデーション, validatorメソッドを使う方法,すでにバリデーションかけられているのでattributes) RegisterControllerの編集 ○バリデーションエラーの日本語化 resources/lang/jp/validation.phpの編集 cp ./resources/lang/en/auth.php ./resources/lang/ja ./resources/lang/ja/auth.phpの編集 ○ここからログイン状態とそれ以外の出し分けとログアウト ○テンプレートの設定 layout.blade.phpの編集 ○Routingの設定(ログイン時のみのページ) web.phpを編集 ○Middlewareの設定(ログイン前だけのページ) app/Http/Middleware/RedirectIfAuthenticated.phpの編集 ○ここからユーザーのリレーション RoomsControllerの編集 ItemsControllerの編集 ○ここからホームページのブラッシュアップ HomeControllerの編集 ○ここからパスワード再設定 ○Mailtrapサービスを使う ○メール接続設定 .env編集 ○テンプレート設定 auth/passwords/email.blade.php編集 auth/passwords/reset.blade.php編集 ○コントローラー設定 Auth/ResetPasswordController.php編集 ○エラーメッセージの日本語化 validation.phpの編集 cp ./resources/lang/en/passwords.php ./resources/lang/ja/ passwords.phpの編集 ○メールの内容を変更する mkdir resources/views/mail/ touch resources/views/mail/password-reset.blade.php password-reset.blade.phpを編集 php artisan make:mail ResetPassword ResetPassword.phpを編集 Models/User.phpを編集 リファクタリング # gitブランチを切り替える $ git branch refactoring-route_model_binding // マイグレーションを作成するブランチ作成 $ git checkout refactoring-route_model_binding // マイグレーションを作成するブランチに切り替える ○ルートモデルバインディングの設定 web.phpの編集 Rooms,Items,Homeコントローラーの編集 テンプレートの編集 リファクタリング # gitブランチを切り替える $ git branch error-handling // マイグレーションを作成するブランチ作成 $ git checkout error-handling // マイグレーションを作成するブランチに切り替える ○エラーハンドリング(認可403) php artisan make:policy RoomPolicy Policies/RoomPolicyの編集 Providers/AuthServiceProviderの編集 web.phpの編集(Middleware) ○エラーハンドリング(紐付け404) Itemsコントローラーの編集 ○エラーハンドリング(403,404,500テンプレート) errors/404.blade.php等の作成 リファクタリング # gitブランチを切り替える $ git branch refactoring-first // マイグレーションを作成するブランチ作成 $ git checkout refactoring-first // マイグレーションを作成するブランチに切り替える 一通り触ってみて修正 ○会員登録、ログインの修正 テンプレートの修正 ○Homeの修正 コントローラの修正 ○ルームとアイテムの処理 これはOK ○まだできていないこと ルームの削除 アイテムの削除 ルームのサイズとアイテムのサイズを比較する ルームの削除とアイテムの削除 # gitブランチを切り替える $ git branch create-rooms-and-items_destroy // マイグレーションを作成するブランチ作成 $ git checkout create-rooms-and-items_destroy // マイグレーションを作成するブランチに切り替える ○ルームの削除機能 Routing コントローラーでリレーションでアイテムまで削除 ○アイテムの削除機能 Routing コントローラー デプロイ 以下の流れで進めました。 さいごに まだ一つ大切な機能ができていないので 出来たら終了です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPとLaravelの勉強中に学んだこと

Laravelのバージョン情報 Laravelのversion リリース日 対応PHPのversion 7 2020年3月 7.2.5以上 8 2020年9月 7.3以上 9 2021年9月予定 7.4以上予定 10 2022年9月予定 未定 バージョン確認方法 php artisan --version MAMPをインストール MAMPと検索して一番上に出てきたものをインストール https://www.mamp.info/en/downloads/ 2021年5月現在は6.3 MAMPとは Web開発に必要なフリーソフトをまとめて扱うパッケージソフトウェア MAMPの使い方 MAMP.appとMAMP PRO.appがあるが、MAMP.appを開く MAMP.appを開くと、右上にStartボタンがあるので押すとローカルでサーバーが起動し、ブラウザが開く ToolからPHPMYADMINを開くことによって、データベースの中身を見ることができる ポートはデフォルトだとhttpが8888、DBが8889になっているが、設定により標準の80(http)と3306(DB)にすることが可能 余談 画面のズームイン・ズームアウト option+command+^でズームイン option+command+-でズームアウト option+command+8でズーム解除/ズーム有効の切り替え MAMPにおけるphpファイルを置く場所 アプリケーション> MAMP > htdocs ここにindex.phpを作成し、 phpの特徴 行末にセミコロン「;」が必要 phpの始まりの書き方 <?php ?> 「<?php」と「>?」の間にphpのコードを記述していく phpの情報を出力する phpinfo(); 文字列の表示 echo('文字列'); ()は省略可能 phpとHTMLを混在して記述する方法 <html> <head></head> <body> HTML <?php echo('php'); ?> </body> </html> 文字列の表現方法 ''か""で囲む '文字' "文字" ''で囲むことが多いっぽい 変数 $hensuu = 1; 基本的に英小文字 型を調べる var_dump($hensuu); phpでエラーが出ると表示されるページ 500 文字列連結 $moji1 = 1; $moji2 = 2; $moji3 = $moji1 . $moji2; echo $moji3; 12 注意 数字を文字列連結すると文字列になる 定数 const MAX = 10; $は不要 基本的に大文字 配列 $array = [1,2,3]; 間に文字列を指定することも可能 配列名をechoするとArrayという文字列が出力される 配列をvar_dumpで型表示する時に整形して表示する方法 $array = [1,'a',3]; echo '<pre>'; var_dump($array); echo '</pre>'; array(3) { [0]=> int(1) [1]=> string(1) "a" [2]=> int(3) } 二次元配列 $array = [ ['赤','青','緑'], ['紫','黄','黒'] ]; echo $array[1][1]; 黄 連想配列 キーと値で表現する配列 ``` $array = [ 'name' => '本田', 'height' => 170, 'hobby' => 'ゲーム', ]; echo $array['hobby']; ``` ゲーム $array = [ '本田' => [ 'height' => 170, 'hobby' => 'サッカー', ], '香川' => [ 'height' => 165, 'hobby' => 'ゲーム', ], ]; echo $array['本田']['height']; echo '<br>'; echo $array['本田']['hobby']; echo '<br>'; echo $array['香川']['height']; echo '<br>'; echo $array['香川']['hobby']; echo '<br>'; 170 サッカー 165 ゲーム 指定が途中で止まってるとArrayと表示される 余り % 条件分岐 if(条件){ } else if(条件){ } else { } ==は値が一致(型は問わない) ===は型も一致 空文字判定 empty(変数); 空ならtrue、空でないならfalse ただし出力すると空の時は1、空でない時は空白になる模様 論理演算子 && || and or どれでもいける foreachを使った繰り返し $members = [ 'name' => '本田', 'height' => 170, 'hobby' => 'サッカー', ]; foreach($members as $member){ echo $member; echo '<br>'; } 本田 170 サッカー $members = [ 'name' => '本田', 'height' => 170, 'hobby' => 'サッカー', ]; foreach($members as $key => $value){ echo $key . ' ' . $value; echo '<br>'; } name 本田 height 170 hobby サッカー 連想配列の中に連想配列がある場合は2重でforeachを使えばOK for for($i=0; $i<10; $i++){ 処理 } while while(条件){ 処理 } switch switch($data){ case 1: 処理 break; case 2: 処理 break; case 3: 処理 break; default: 処理 } if文のほうが好ましいらしい なぜならこの書き方では型までは見ないため 一応switchでも===を使う方法はある case $data === 1: のようにする こうするくらいならifのほうがシンプルに書ける 関数 function test(引数1,引数2){ 処理 return 戻り値; } 文字列の長さ strlen(文字列); 'test'なら4って返ってくる 333なら3って返ってくる intで返ってくる マルチバイト文字列だと文字数でない点に注意 マルチバイト文字列の場合は以下のようにする mb_strlen(文字列); 文字列を置換 $str1 = '置換前'; $str2 = str_replace('前', '後', $str1); echo $str2; 置換後 文字列を指定文字列分割する $str1 = '赤 青 緑'; $str2 = explode(' ',$str1); echo $str2[1]; 青 配列を指定文字列で連結する $str1 = ['赤','青','緑']; $str2 = implode(',',$str1); echo $str2; 赤,青,緑 特定の文字列が含まれているか確認する preg_match('/文字列/',変数); 郵便番号かどうかとか、メールアドレスかどうかに使われたりする 指定文字列を切り出す $str1='test'; /* 0originで1番目から2文字を切り出す */ $str2=substr($str1,1,2); echo $str2; es マルチバイト文字列の場合はmb_substrを使用する 配列操作にオススメのページ http://html2php.starrypages.net/php/array-funcs 配列に配列を追加 array_push グローバル変数について グローバル変数を利用する時はローカルでglobalと記述すると使えるが殆ど使わず、関数の引数にすることが多い 他のphpファイルを読み込む エラーで止まるようにする require(); require_once(); 警告でそのまま進む include(); include_once(); ()の中はそのファイルからのパス 相対パスでも絶対パスでも行ける __DIR__とするとそのファイルのパス __FILE__とすると現在のファイルのパス エラーや警告が表示されるようにする phpinfo();で出力されるConfiguration File (php.ini) Pathを確認する /Applications/MAMP/bin/php/php7.4.12/conf その中にphp.iniがあるのでバックアップを取っておく 続いてphp.iniの中にある display_errors = Off を display_errors = On に変更する ※コメント行じゃないほうを修正する必要がある 処理を止める方法 exit; var_dumpと組み合わせて使うと便利 スーパーグローバル変数 \$_GET $_POST 連想配列になってる デバッグする時はvar_dump($_GET);とすると色々と情報が見れて便利 GETとPOSTの違い リクエストパラメータの場所に違いがある GETだとurlにリクエストパラメータがつく POSTだとbodyにリクエストパラメータがつく phpコードとhtmlコードが混在している時に分かりやすくif文を書く裏技 見にくいほう <?php if(条件){ ?> htmlの記述 <?php } ?> 見やすいほう <?php if(条件): ?> htmlの記述 <?php endif; ?> 違いは{と}で括るか、:とendif;で括るか 書き方だけの違い 処理の内容としては同じ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む