20210615のlaravelに関する記事は8件です。

Laravel リダイレクト後 フラッシュメッセージ

はじめに フラッシュメッセージは、リクエストされた間だけ表示される一時的なメッセージのことです。 エラーメッセージを表示したり、 処理が完了したことをお知らせするときなどによく使われますね! 今回は最もよく使われるであろうredirect後のフラッシュメッセージの 表示方法を自分の頭の整理をかねてメモ。 ちなみにどのLaravelのバージョンでも作動します! 書き方 以下のようなリダイレクトされるコードがあったとします。 app/Http/Controllers/XxxController.php public function confirm() { return view('auth/delete/hoge'); } public function delete() { return redirect('/delete/hoge'); } このリダイレクト先にフラッシュメッセージのデータを渡すには、redirect()メソッドからアロー演算子でwith()メソッドを繋ぐだけでokです。 with() メソッドの第1引数にキー、第2引数に値を入れます。 app/Http/Controllers/XxxController.php public function delete() { return redirect('/delete/hoge')->with('message', 'パスワードが違います'); } データはセッションに保存されるので、Viewで表示するときはsession() を使います。 resources/views/auth/delete/hoge.blade.php @if (session('message')) <div class="alert alert-danger"> {{ session('message') }} </div> @endif お手軽で実装できますね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laradockで複数プロジェクトの環境構築をする

【Laravel】Laradockで複数プロジェクトを動かす手順 https://laradock.io/getting-started/#B 公式と上の記事を参考にlaradockの開発環境をしてみました。 その記録として、残しておこうと思います。 1プロジェクトに1laradockで増やしていくことを前提とした内容です。 workspace |_app |_laradock |_source この環境構築の際にものすごくエラーがでたので、エラーだけをまとめた記事を別で作りました。合わせて参考にしていただければ幸いです。 laradock環境構築のエラーと解決策 Laradockをgit cloneする $ git clone https://github.com/Laradock/laradock.git laradock envファイルを編集 まずは基本的な設定から。 $ cd laradock $ cp .env.example .env 以下の部分を変えてください。バージョンはお好みで。 APP_CODE_PATH_HOST=../app DATA_PATH_HOST=.app/data COMPOSE_PROJECT_NAME=app PHP_VERSION=7.3 MYSQL_VERSION=5.7 confファイルを編集 $ cd nginx/sites $ cp laravel.conf.example app.conf コピーして内容を変更します。 下記引用しました。こちらに沿ってください。 larave.conf.exampleではlaravelというフォルダで動かすようにかかえれているので、そのlaravel部分をproject1という風に書き換えます。 またproject1.testだとchromeで動かなかったりするのでproject1.localとしています。 (https://pensuke.work/posts/laradock-multiproject/) また「hostsの設定を行う」という手順もありますが、現在設定はしていますが、自分の環境では上手くいってないので、割愛します。 (個別で設定してるのにlocalhostでも表示されてしまうのです…) こちらも引用させていただきます。 Nginxでdocker上のサイト設定は行いましたが、これだけではローカルPC上で http://project1.local/にアクセスしてもなにも表示されません。 hostsの最下部に追記しましょう。 編集ファイル: /private/etc/hosts 127.0.0.1 project1.local ::1 project1.local DBの設定 $ cd mysql/docker-entrypoint-initdb.d/ $ cp createdb.sql.example createdb.sql この中のファイルを以下のように編集します CREATE DATABASE IF NOT EXISTS `app` COLLATE 'utf8_general_ci' ; GRANT ALL ON `app`.* TO 'default'@'%' ; コメントアウトを外し、2ヶ所変更します。 mysqlコンテナを立ち上げ、DBの内容を確認しましょう $ docker-compose up -d mysql $ docker exec -it laradock_mysql_1 bash # mysql -u root -p Enter password: Server version: 5.7.34 MySQL Community Server (GPL) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | default | | mysql | | performance_schema | | sys | | app | +--------------------+ 6 rows in set (0.00 sec) 自分の作りたいDB名がはいってたらOKです。 アプリを作る or プロジェクトをgit cloneして残りのコンテナを起動 自分の場合はgit cloneしました。 新しく作る場合は他でも紹介されているので割愛します。 $ docker-compose exec --user=laradock workspace bash # git clone URL git cloneしてきた場合は.envファイルをコピー&venderファイルを作成してください $ docker exec -it laradock_workspace_1 bash # cd app # cp .env.example .env # composer install プロジェクト内の.envファイルがテキストエディタなどで保存できない場合は、 権限を確認して、変更してください。 これを # ls -l total 1604 drwxr-xr-x 14 root root 4096 Jun 3 10:27 app -rw-r--r-- 1 root root 1686 Jun 3 10:27 artisan 省略 こう # chown -R laradock:laradock /var/www # ls -l total 1604 drwxr-xr-x 14 laradock laradock 4096 Jun 3 10:27 app -rw-r--r-- 1 laradock laradock 1686 Jun 3 10:27 artisan 省略 laravelプロジェクトの.envファイルを編集 laradockのmysqlコンテナを立ち上げる前に設定したDB名にしましょう。 DB_DATABASE=app migrateする /var/www# cd app # php artisan migrate マイグレーションできない時はmysqlの権限を確認してください $ docker exec -it laradock_mysql_1 bash # /var/lib/mysql# ls -l ちなみにファイル構成はこんな感じでつくったDBが入ってます root@5120d5325290:/var/lib/mysql# ls auto.cnf ca.pem client-key.pem ib_buffer_pool ib_logfile1 ibtmp1 performance_schema public_key.pem server-key.pem app ca-key.pem client-cert.pem default ib_logfile0 ibdata1 mysql private_key.pem server-cert.pem sys 権限がmysql以外になってたら、mysqlに変えましょう -rw-r----- 1 1000 1000 56 Jun 3 09:47 auto.cnf -rw------- 1 1000 1000 1676 Jun 3 09:47 ca-key.pem -rw-r--r-- 1 1000 1000 1112 Jun 3 09:47 ca.pem 省略 # chown -R mysql:mysql /var/lib/mysql root@5120d5325290:/var/lib/mysql# ls -l total 188484 -rw-r----- 1 mysql mysql 56 Jun 3 09:47 auto.cnf -rw------- 1 mysql mysql 1676 Jun 3 09:47 ca-key.pem これでOK! 再度migrateしましょう webページが表示されるか確認 ここまできたらあと少しです! コンテナを全て立ち上げ、webページが表示されるか見てみましょう。 $ docker-compose up -d nginx mysql APP KEYを作成する 最後にlaravelのエラー画面が出ていたら、APP KEYを作成してください。 # php artisan key:generate Application key set successfully. # php artisan config:cache Configuration cache cleared! Configuration cached successfully! これでlaravelが使えるようになっているはずです!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelのCollectionで複数カラムでのソート

通常のorderBy ID降順でソート $items = [ [ 'id' => 1, 'datetime' => '2021-06-01', ], [ 'id' => 2, 'datetime' => '2021-06-02', ], [ 'id' => 3, 'datetime' => '2021-06-01', ], [ 'id' => 4, 'datetime' => '2021-06-02', ], ]; $items = collect($items)->sortByDesc('id')->toArray(); dd($items); 結果 array:4 [ 3 => array:2 [ "id" => 4 "datetime" => "2021-06-02" ] 2 => array:2 [ "id" => 3 "datetime" => "2021-06-01" ] 1 => array:2 [ "id" => 2 "datetime" => "2021-06-02" ] 0 => array:2 [ "id" => 1 "datetime" => "2021-06-01" ] ] 複数カラムでソート datetime降順、ID昇順でソート $items = [ [ 'id' => 1, 'datetime' => '2021-06-01', ], [ 'id' => 2, 'datetime' => '2021-06-02', ], [ 'id' => 3, 'datetime' => '2021-06-01', ], [ 'id' => 4, 'datetime' => '2021-06-02', ], ]; $res = collect($items)->sortBy([ ['datetime', false], // [カラム名, 昇順でソートするか] ['id', true] ])->toArray(); dd($res); 結果 array:4 [ 0 => array:2 [ "id" => 2 "datetime" => "2021-06-02" ] 1 => array:2 [ "id" => 4 "datetime" => "2021-06-02" ] 2 => array:2 [ "id" => 1 "datetime" => "2021-06-01" ] 3 => array:2 [ "id" => 3 "datetime" => "2021-06-01" ] ] おまけ sortBy()の内部ではsortByMany()という関数が呼ばれています。このメソッドの中のis_callable($prop)というところでカラム名がcallableかどうかを確かめています。つまり、dateなどの組み込み関数と同じ名前がソートするカラム名に含まれているとエラーが発生します。気をつけましょう。 protected function sortByMany(array $comparisons = []) { $items = $this->items; usort($items, function ($a, $b) use ($comparisons) { foreach ($comparisons as $comparison) { $comparison = Arr::wrap($comparison); $prop = $comparison[0]; $ascending = Arr::get($comparison, 1, true) === true || Arr::get($comparison, 1, true) === 'asc'; $result = 0; if (is_callable($prop)) { $result = $prop($a, $b); } else { $values = [data_get($a, $prop), data_get($b, $prop)]; if (! $ascending) { $values = array_reverse($values); } $result = $values[0] <=> $values[1]; } if ($result === 0) { continue; } return $result; } }); return new static($items); } ``
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravelでdoctrine

はじめに https://github.com/laravel-doctrine/orm を使ってlaravelでDoctrineしてみた。 インストール Laravelプロジェクトの作成。 curl -s "https://laravel.build/laravel-doctrine" | bash cd laravel-doctrine 依存ライブラリのインストール。 sail composer req doctrine/inflector:^1.4 laravel-doctrine/orm laravel-doctrine/migrations sail artisan vendor:publish --tag="config" EntityとRepositoryの作成 Entity larave-doctrineを使う時はEloquentのモデルを用いません。代わりにapp/Entities/以下にモデルの代わりのクラスであるエンティティを作成します。エンティティにはアノテーションでカラム情報などのメタデータを付与する必要がありますが、基本的にはPOPOとして定義できるのがEloquentとの大きな違いです。また、カラムとのマッピングはymlやxmlで定義することもでき、そのようにするとエンティティは純粋なPOPOになります。メタデータに関してはこちらを参照ください。 laravelのレスポンスに直接渡せるようにIlluminate\Contracts\Support\Arrayableをimplementsしておくと便利です。 app/Entities/User.php <?php namespace App\Entities; use Doctrine\ORM\Mapping as ORM; use Illuminate\Contracts\Support\Arrayable; /** * @ORM\Entity */ class User implements Arrayable { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="string") */ protected $name; public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name): self { $this->name = $name; return $this; } public function toArray() { return [ 'id' => $this->id, 'name' => $this->name, ]; } } Repository Doctrineを使った設計では、基本的に一つのエンティティに対して一つのリポジトリを作ります。リポジトリクラスでは以下のようにDoctrine\ORM\EntityRepositoryを継承し、コンストラクタで親クラスにEntityManagerInterfaceとメタデータを渡します。 また、Doctrine\ORM\EntityRepositoryにはfind()、findAll()、findBy()、findOneBy()、count()などのよく使うメソッドがあらかじめ定義されているので、これらのメソッドは自分で実装する必要がありません。 app/Repository/UserRepository.php <?php namespace App\Repository; use App\Entities\User; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; class UserRepository extends EntityRepository { public function __construct(EntityManagerInterface $em) { parent::__construct($em, $em->getClassMetadata(User::class)); } } マイグレーションの作成と実行 Eloquentを使う時はマイグレーションファイルは自前で書く必要がありました。Doctrineでは、エンティティに付与したメタデータと実際のDBとの差分を見て自動でマイグレーションを作ってくれます(めちゃくちゃ便利)。 sail artisan doctrine:migrations:diff sail artisan doctrine:migrations:migrate 簡単な例 コントローラーを作成し、ルートに登録します。 routes/api.php <?php use App\Http\Controllers\UserController; use Illuminate\Support\Facades\Route; Route::group(['auth:api'], function () { Route::resource('users', UserController::class)->only([ 'index', 'store', 'show', 'destroy' ]);; }); コントローラーの各メソッドでは、先ほど作ったリポジトリをメソッドインジェクションできます。リポジトリにはfindXXX()系のメソッドが既に定義されているので、簡単な検索ならメソッドを追加するまでもありません。 リポジトリはデータソースとしての役割のみ持っていますので、「データの更新」や「データの削除」などDBへの書き込みはエンティティマネージャーを通して行う必要があります。エンティティマネージャーはlaravel-doctrineでFacadeとして提供されているのでEntityManager::persist($user)やEntityManager::flush()のように使うことも可能です。 app/Http/Controllers/UserController.php <?php namespace App\Http\Controllers; use App\Entities\User; use App\Repository\UserRepository; use Doctrine\ORM\EntityManagerInterface; use Illuminate\Http\JsonResponse; class UserController extends Controller { public function index(UserRepository $repository): JsonResponse { $users = $repository->findAll(); return response()->json(collect($users)); } public function store(EntityManagerInterface $entityManager): JsonResponse { $user = new User(); $user->setName('test'); $entityManager->persist($user); $entityManager->flush(); return response()->json($user); } public function show($id, UserRepository $repository): JsonResponse { $user = $repository->find($id); return response()->json($user); } public function destroy($id, UserRepository $repository, EntityManagerInterface $entityManager): JsonResponse { $user = $repository->find($id); if (!$user) { return response()->json([], 404); } $entityManager->remove($user); $entityManager->flush(); return response()->json(); } } こんな感じに動きます。 $ curl http://localhost/api/users [] $ curl http://localhost/api/users -X POST {"id":1,"name":"test"} $ curl http://localhost/api/users -X POST {"id":2,"name":"test"} $ curl http://localhost/api/users -X POST {"id":3,"name":"test"} $ curl http://localhost/api/users/2 [{"id":2,"name":"test"}] $ curl http://localhost/api/users/2 -X DELETE [] $ curl http://localhost/api/users [{"id":1,"name":"test"},{"id":3,"name":"test"}] 感想 Eloquentを使うメリットはやはりLaravelとの親和性がとても高いところです。しかし、リポジトリパターンを使おうとすると、Eloquentの便利メソッド系はリポジトリ内でしか使えないという暗黙のルールができてしまいます。それなら最初からリポジトリを考慮した設計のORM使った方がよくない?と思い今回laravel-doctrineを触ってみました。 まだ本当に基本的なことしかしてないですが、ORMとしての機能はまったく問題なさそうな感じがします。また、エンティティにはIlluminate\Contracts\Support\Arrayableをはじめとするインターフェイス類をimplementsさせればLaravelとの親和性も思ったほど低くならないかも?とも思いました。 もう少し色んなパターンで触ってみます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel input type="time"を使ってcreated_atカラムを検索する

絞り込み検索などを実装する際、年月日は置いておき、時間だけで検索したい! という時に実装した事を忘備録としてまとめます。 抽象化するとわかりにくいので、具体例を用いてまとめます。 Laravelでブログを制作し、記事一覧ページなどから投稿記事を「作成時間」で検索する(あまり時間で検索することはないかもですが。。)機能を作るというシーンとします。 ○時×分〜□時△分に投稿された記事を検索するイメージです。 形式の違い timestamps (検索参照先) Laravelでブログサイトなどを作る時、普通は記事のテーブルにtimestamps()でcreated_atとupdated_atのカラムを作成するかと思います。 今回はこのcreated_atを参照して記事を検索します。 created_atやupdated_atなど、timestamps()で作成された値は、特別何も指定しなければ、Y-m-d H:i:sの形式(ex.2021年6月7日15時40分10秒に記事を作成したら2021-06-07 15:40:10)で保存されます。 時間だけで検索したいのに、、、Y-m-d が邪魔で実装しにくそう。。 input type="time" (検索入力元) inputタグにはtype="time"という便利なオプションがあります。 時間の入力をinput type="time"を使うと、H:iの形式(ex.15:40)という値を簡単に入力する事ができます。 今回はこれを使います。 形式の違いまとめ 形式 timestamps() ※created_at Y-m-d H:i:s input type="time" H:i ここまでで上表の通り、表記の違いが生じる事がわかりました。 timestampsでは年月日に加えて秒まで記録してくれてます。今回に関しては余計な事を...!って感じです。 検索時にはこれを合わせなければなりませんが手間が掛かりそうですよね。 whereTime()を使う そんな時に便利なのが、whereTime()です。 Laravelクエリビルダには時間に関係する色々なWHERE節が用意されています。 (whereDate / whereMonth / whereDay / whereYear / whereTime) 実装 検索フォームについて詳細は省略しますが、時間入力の部分はこんな感じにします。 list.blade.php <input type="time" name="from_time"> <span>〜</span> <input type="time" name="to_time"> ○時×分〜□時△分の記事を検索。 nameの値は ○時×分:from_time □時△分:to_timeとします。 では、Controllerの実装です。 ArticleController.php public function list(Request $request) { // それぞれの入力値を取り出す $from_time = $request->from_time; //○時×分 $to_time = $request->to_time; //□時△分 // 両方の入力フォームに入力があった時のみ検索 if(!empty($request->from_time) || !empty($request->to_time)){ $query->whereTime('created_at','>=',$from_time.':00')->whereTime('created_at','<=',$until_time.':59'); $articles = $query->get()->sortByDesc('created_at'); }else{ $articles = Article::all()->sortByDesc('created_at'); //検索がない時は全ての記事を取得 } return view('article.list', ['articles' => $articles]); } これで時間だけを指定して検索する事ができます。 解説 $query->whereTime('created_at','>=',$from_time.':00')->whereTime('created_at','<=',$until_time.':59');この一文についてですが、、、 ポイント① まずwhereTime('created_at','>=',$from_time.':00')で$from_time(○時×分)以降の記事を検索し、その記事群からwhereTime('created_at','<=',$until_time.':59')で$to_time(□時△分)までの記事に絞り込むイメージです。 比較演算子が使えるのでwhereBetweenを使わなくても範囲指定できます。 ポイント② 形式の違いを確認した際、秒の有無がありましたが、これは$from_time.':00と$until_time.':59で秒を無理やり付け足して解決です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laradock環境構築のエラーと解決策

laradockで環境構築したらエラーの見本市かな?というくらいにエラーが出たのでその時のエラーと解決策をまとめました。 色んなエラーが出たので参考までにどうぞ! プロジェクトフォルダをVScode等で書き換えようとするとエラーになる でもvimだったら変更できる、という方は権限の問題です。 workspaceのソースコードのあるディレクトリで、権限を確認してください /var/www/app$ ls -l /var/www/app$ ls -l total 1600 drwxr-xr-x 14 root root 4096 Jun 3 10:27 app -rw-r--r-- 1 root root 1686 Jun 3 10:27 artisan drwxr-xr-x 3 root root 4096 Jun 3 10:27 bootstrap -rw-r--r-- 1 root root 2153 Jun 3 10:27 composer.json -rw-r--r-- 1 root root 313747 Jun 3 10:27 composer.lock drwxr-xr-x 2 root root 4096 Jun 3 10:27 config drwxr-xr-x 5 root root 4096 Jun 3 10:27 database -rw-r--r-- 1 root root 1275 Jun 3 10:27 package.json (省略) このような感じでrootになっていたら全てのファイルをlaradockに変える必要があります。 これで解決 /var/www# chown -R laradock:laradock /var/www /var/www以下の権限をlaradockに変更することで、コンテナ外のVScodeからでも保存できます。 root@09e56af218da:/var/www/source# ls -l total 1604 drwxr-xr-x 14 laradock laradock 4096 Jun 3 10:27 app -rw-r--r-- 1 laradock laradock 1686 Jun 3 10:27 artisan drwxr-xr-x 3 laradock laradock 4096 Jun 3 10:27 bootstrap -rw-r--r-- 1 laradock laradock 2153 Jun 3 10:27 composer.json -rw-r--r-- 1 laradock laradock 313747 Jun 3 10:27 composer.lock drwxr-xr-x 2 laradock laradock 4096 Jun 3 10:27 config drwxr-xr-x 5 laradock laradock 4096 Jun 3 10:27 database -rw-r--r-- 1 laradock laradock 1275 Jun 3 10:27 package.json (省略) 良い感じ! しかしこのようになっている人は、コンテナに入るコードが違っている可能性があります。laradockユーザーでコンテナに入ってください。 $ docker-compose exec --user=laradock workspace bash MySQLのインストールバージョンを間違えた&Permission deniedで.laradock/data/mysqlが消せない 人間、間違えてはいけない時こそ間違えるんですよねぇ(遠い目) ほんとは5.7がよかったのにやってしまった $ docker-compose exec mysql mysql --version mysql Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL) $ cat .env | grep DATA_PATH_HOSTで探した場所にdockerの情報がはいっていて、これを消さないとここから過去のデータを引き継いでしまいます。 Dockerさんすごい賢い $ cat .env | grep DATA_PATH_HOST DATA_PATH_HOST=~/.laradock/data $ rm -rf ~/.laradock/data/mysqlこれができなかったら $ sudo rm -rf ~/.laradock/data/mysqlこっちで消し去ってください。 $ docker rmi laradock_mysql $ docker rm (mysqlコンテナID) $ docker ps -a mysqlコンテナもイメージも消し去り、それを確認してください そして今度は、laradockの.envファイルを正しく修正してください。 その後もう一度mysqlコンテナを立ち上げて、バージョンを確認してください。 $ docker-compose up -d mysql $ docker-compose exec mysql mysql --version mysql Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using EditLine wrapper 作るDBの名前を間違えた $ docker-compose up -d mysql $ docker exec -it laradock_mysql_1 bash # mysql -u root -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | default | | dev_db_1 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) DB作ったし、内容確認… dev_db_1じゃないの、違う名前がいいの… そんな時も解決方法は上記MySQLのバージョンを間違えた場合と同じようにイメージとdataを消し去ってから再度コンテナを作り直して下さい。 Fatal error: require(): Failed opening required '/project/vendor/autoload.php' (include_path='.:') in /project/artisan on line 18 いざlaravel動かすぞ〜と思った矢先、動かせない そんな時はこれで解決 /var/www/app# $ composer install git cloneしたアプリだとvenderがないのでエラーが起こるようです。 インストールできたらOK! Package manifest generated successfully. 87 packages you are using are looking for funding. Use the `composer fund` command to find out more! SQLSTATE[HY000]: General error: 1017 Can't find file: './app/migrations.frm' (errno: 13 - Permission denied) マイグレーションしようとしたらこんなエラーが SQLSTATE[HY000]: General error: 1017 Can't find file: './app/migrations.frm' (errno: 13 - Permission denied) こちらも権限がないため書き込みができない状態になっています。 自分のMySQLディレクトリの権限がどうなってるか確認しましょう $ docker exec -it laradock_mysql_1 bash # cd var # cd lib # cd mysql /var/lib/mysql# ls auto.cnf ca.pem client-key.pem ib_buffer_pool ib_logfile1 ibtmp1 performance_schema public_key.pem server-key.pem app ca-key.pem client-cert.pem default ib_logfile0 ibdata1 mysql private_key.pem server-cert.pem sys データベースの内容と諸々のファイルがでてきたらここのディレクトリです。 /var/lib/mysql# ls -l total 188484 -rw-r----- 1 1000 1000 56 Jun 3 09:47 auto.cnf -rw------- 1 1000 1000 1676 Jun 3 09:47 ca-key.pem -rw-r--r-- 1 1000 1000 1112 Jun 3 09:47 ca.pem -rw-r--r-- 1 1000 1000 1112 Jun 3 09:47 client-cert.pem -rw------- 1 1000 1000 1680 Jun 3 09:47 client-key.pem drwxr-x--- 2 1000 1000 4096 Jun 3 09:47 default -rw-r----- 1 1000 1000 1359 Jun 3 09:47 ib_buffer_pool -rw-r----- 1 1000 1000 50331648 Jun 3 10:24 ib_logfile0 省略 全部が1000になっていますね、これを全てmusqlに変更しましょう。 これで解決 # chown -R mysql:mysql /var/lib/mysql 権限を確認 # ls -l total 188484 -rw-r----- 1 mysql mysql 56 Jun 3 09:47 auto.cnf -rw------- 1 mysql mysql 1676 Jun 3 09:47 ca-key.pem 省略 これでいけそうですね。 mysqlコンテナから抜けてworkspaceコンテナからapp直下にはいり、migrateを実行してください docker exec -it laradock_workspace_1 bash # php artisan migrate webページを開くと、No application encryption key has been specified.となる workspaceコンテナの内部で、APP KEYを作成してください。 # php artisan key:generate Application key set successfully. # php artisan config:cache Configuration cache cleared! Configuration cached successfully! 参考 【Laravel】Laradockで複数プロジェクトを動かす手順 https://laradock.io/getting-started/#B Laradock環境MySQLで新しいDBを追加する Laradock で mysql がうまく動作しない時は ( mysqlコンテナが起動しない、migration 出来ない) [MySQL]権限の確認と付与 hostsファイルの場所 Windows10 No application encryption key has been specified.となったときの対応方法 MySQL, copying tables files gives rise to “ERROR 1017 (HY000): Can't find file:” even though its there there ERROR 1017 (HY000): Can’t find file: ‘./….frm’ (errno: 13) – MySQL error. How to fix? mysqlを5.5 -> 5.6にバージョンアップしたら、Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)で起動こける 既にあるLaradock環境をそのままに複数のLaradock環境を構築する(Windows) docker-composeとdockerコマンドまとめ Laradock nginxでの404 not found Laravelのエラー:Fatal error: require(): Failed opening required '/project/vendor/autoload.php' (include_path='.:') in /project/artisan on line 18 LaradockでLaravel+Docker環境構築(mac)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelのログイン時に使用するHash変更 bcrypt→PHPass(Wordpress)

概要 Laravelではパスワードのハッシュ化にはbcryptがデフォルトで設定されているので、 WordPressに使用されているPHPassに変更する。 注意しなければならないのが、今回はbcryptとPHPassを共存させるわけではなく全てPHPassにハッシュ方式に統一させます。 背景として、既存システムのWordPressのwp_usersを新規システムのLaravel側のusersテーブルに移行する必要がありました。 なので、bcryptは完全にやめてWordpressのハッシュ方式に変更しました。 bcrypt→PHPass(WordPress)にハッシュ変更 ①必要パッケージインストール WordPressに使用されているパスワードのチェック、平文のハッシュ化を行うためのパッケージをインストールします。 composer.json "require": { "mikemclin/laravel-wp-password": "~2.0.1" } composer update 参考 https://github.com/mikemclin/laravel-wp-password ②Service作成 makeとcheckは会員登録とログインで使用される関数です。 ここをインストールしたパッケージを使用してWordPress仕様に変更します。 App\Services\PHPass\PHPassHashService.php <?php namespace App\Services\PHPass; use MikeMcLin\WpPassword\Facades\WpPassword; class PHPassHashService implements \Illuminate\Contracts\Hashing\Hasher { /** * Hash the given value. * * @param string $value * @return array $options * @return string */ public function make($value, array $options = array()) { return WpPassword::make($value); } /** * Check the given plain value against a hash. * * @param string $value * @param string $hashedValue * @param array $options * @return bool */ public function check($value, $hashedValue, array $options = array()) { return WpPassword::check($value, $hashedValue); } /** * Check if the given hash has been hashed using the given options. * * @param string $hashedValue * @param array $options * @return bool */ public function needsRehash($hashedValue, array $options = array()) { return false; } /** * Get information about the given hashed value. * * @param string $hashedValue * @return array */ public function info($hashedValue) { // TODO: Implement info() method. } } ③Provider作成 サービスを使用するためのプロバイダーを作成 App\Providers\PHPassHashServiceProvider.php <?php namespace App\Providers; use App\Services\PHPass\PHPassHashService; use Illuminate\Support\ServiceProvider; class PHPassHashServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { $this->app->bind('hash', PHPassHashService::class); } /** * Bootstrap services. * * @return void */ public function boot() { // } public function provides() { return array('hash'); } } ④プロバイダー変更 config\app.php 'providers' => [ //Illuminate\Hashing\HashServiceProvider::class, ←コメントアウト App\Providers\PHPassHashServiceProvider::class, ←追加 ] これでlaravel/ui等で作った認証でbcryptではなくWordPressのハッシュ方式に変更が完了となります。 参考 https://solomaker.club/how-to-change-default-laravel-hash/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelの認証機能に使用するハッシュ変更 bcrypt→PHPass(Wordpress)

概要 Laravelではパスワードのハッシュ化にはbcryptがデフォルトで設定されているので、 WordPressに使用されているPHPassに変更する。 注意しなければならないのが、今回はbcryptとPHPassを共存させるわけではなく全てPHPassにハッシュ方式に統一させます。 背景として、既存システムのWordPressのwp_usersを新規システムのLaravel側のusersテーブルに移行する必要がありました。 なので、bcryptは完全にやめてWordpressのハッシュ方式に変更しました。 bcrypt→PHPass(WordPress)にハッシュ変更 ①必要パッケージインストール WordPressに使用されているパスワードのチェック、平文のハッシュ化を行うためのパッケージをインストールします。 composer.json "require": { "mikemclin/laravel-wp-password": "~2.0.1" } composer update 参考 https://github.com/mikemclin/laravel-wp-password ②Service作成 makeとcheckは会員登録とログインで使用される関数です。 ここをインストールしたパッケージを使用してWordPress仕様に変更します。 App\Services\PHPass\PHPassHashService.php <?php namespace App\Services\PHPass; use MikeMcLin\WpPassword\Facades\WpPassword; class PHPassHashService implements \Illuminate\Contracts\Hashing\Hasher { /** * Hash the given value. * * @param string $value * @return array $options * @return string */ public function make($value, array $options = array()) { return WpPassword::make($value); } /** * Check the given plain value against a hash. * * @param string $value * @param string $hashedValue * @param array $options * @return bool */ public function check($value, $hashedValue, array $options = array()) { return WpPassword::check($value, $hashedValue); } /** * Check if the given hash has been hashed using the given options. * * @param string $hashedValue * @param array $options * @return bool */ public function needsRehash($hashedValue, array $options = array()) { return false; } /** * Get information about the given hashed value. * * @param string $hashedValue * @return array */ public function info($hashedValue) { // TODO: Implement info() method. } } ③Provider作成 サービスを使用するためのプロバイダーを作成 App\Providers\PHPassHashServiceProvider.php <?php namespace App\Providers; use App\Services\PHPass\PHPassHashService; use Illuminate\Support\ServiceProvider; class PHPassHashServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { $this->app->bind('hash', PHPassHashService::class); } /** * Bootstrap services. * * @return void */ public function boot() { // } public function provides() { return array('hash'); } } ④プロバイダー変更 config\app.php 'providers' => [ //Illuminate\Hashing\HashServiceProvider::class, ←コメントアウト App\Providers\PHPassHashServiceProvider::class, ←追加 ] これでlaravel/ui等で作った認証でbcryptではなくWordPressのハッシュ方式に変更が完了となります。 参考 https://solomaker.club/how-to-change-default-laravel-hash/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む