- 投稿日:2020-09-15T23:45:56+09:00
Laravel 環境構築 AWS EC2(nginx + PHP) + RDS
前提
ec2インスタンス作成済み
sshできるパッケージアップデート
sudo yum update
PHP
2020/09/11現在
amazon-linux-extras リポジトリにPHP7.4がありますsudo amazon-linux-extras enable php7.4 ##こんな出力があります Now you can install: # yum clean metadata # yum install php-cli php-pdo php-fpm php-json php-mysqlnd有効化の後yum を使用してトピックをインストールします。
Now you can install:
のコマンド突っ込めば大丈夫ですsudo yum install php-cli php-pdo php-fpm php-json php-mysqlnd -yphp -v PHP 7.4.9 (cli) (built: Aug 21 2020 21:45:11) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies足りない拡張追加
Laravelのサーバー要件
※Laravel 7.x
PHP >= 7.2.5
BCMath PHP拡張
Ctype PHP拡張
Fileinfo PHP extension
JSON PHP拡張
Mbstring PHP拡張
OpenSSL PHP拡張
PDO PHP拡張
Tokenizer PHP拡張
XML PHP拡張これに従い追加します
追加済みの拡張を調べますphp -m | grep -e bcmath -e PDO -e ctype -e fileinfo -e json -e mbstring -e openssl -e pdo -e tokenizer -e ^xml$
php -m
でインストール済み拡張が出力されます
コマンド | grep [オプション] 検索パターン
でコマンドでの出力に対してgrep(絞り込み)
が掛かります
-e 検索パターン
をたくさん使用して複数の単語に対して引っかかる検索かけています。私の環境ですと下記の拡張がインストール済みのようでした。
なので、そのほかをインストールしていきますctype fileinfo json openssl PDO pdo_mysql pdo_sqlite tokenizer # 足りないもの # bcmath # mbstring # xml
bcmath
,mbstring
,xml
が足りないので追加しますsudo yum install php-bcmath php-mbstring php-xml -yopcache
インストール
設定ではないけど、opcacheを入れます
sudo yum install php-opcache確認
php -v #PHP 7.4.9 (cli) (built: Aug 21 2020 21:45:11) ( NTS ) #Copyright (c) The PHP Group #Zend Engine v3.4.0, Copyright (c) Zend Technologies # with Zend OPcache v7.4.9, Copyright (c), by Zend Technologies設定値の変更
php.ini
の場所を調べますphp --ini
php --ini Configuration File (php.ini) Path: /etc Loaded Configuration File: /etc/php.ini Scan for additional .ini files in: /etc/php.d Additional .ini files parsed: /etc/php.d/10-opcache.ini, /etc/php.d/20-bcmath.ini, /etc/php.d/20-bz2.ini, /etc/php.d/20-calendar.ini, #...
opcache.ini
で設定を変えますsudo vi /etc/php.d/10-opcache.ini
https://www.php.net/manual/ja/opcache.installation.php
推奨設定に合わせて編集しますopcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1php-fpm
FPMとは、FastCGI Process Managerの略でPHP5.4.0から公式サポートされたPHP標準のアプリケーションサーバです。名前にあるFastCGIというプロトコルで通信するよう実装されています。 FastCGIは、Webサーバとアプリケーションサーバの間で使われるプロトコルの一つで、ここでの例ではnginxとPHP-FPMの間で交わされるプロトコルとなります。
参考
https://hacknote.jp/archives/27419/
https://hackers-high.com/linux/php-fpm-config/起動
sudo service php-fpm start
確認
sudo systemctl status php-fpm php-fpm.service - The PHP FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled) Active: active (running) since 金 2020-09-11 17:15:02 JST; 1 day 17h ago自動起動
sudo systemctl enable php-fpmComposer
インストール
https://getcomposer.org/download/
公式のコマンドを叩いていきます
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '795f976fe0ebd8b75f26a6dd68f78fd3453ce79f32ecb33e7fd087d39bfeb978342fb73ac986cd4f54edd0dc902601dc') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"移動
sudo mv composer.phar /usr/local/bin/composer
確認
composer ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.10.13 2020-09-09 11:46:34nginx
インストール
PHPと同様にamazon-linux-extras リポジトリにあります
sudo amazon-linux-extras enable nginx1 ##こんな出力があります Now you can install: # yum clean metadata # yum install nginxインストール
sudo yum install nginx -ynginx -v nginx version: nginx/1.18.0
起動
インストールしただけだと、起動していない
sudo systemctl start nginx
(上記コマンドを叩いても出力はなにもないです)
起動しているか確認します
sudo systemctl status nginx nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/nginx.service.d └─php-fpm.conf Active: active (running) since 金 2020-09-11 08:15:02 UTC; 2s ago自動起動設定
現状EC2再起動するたび、自力で立ち上げないといけない
sudo systemctl enable nginx画面確認
EC2のIPをブラウザで入力
Gitインストール
sudo yum install git git --version # >git version 2.23.3PHP + nginx設定
両方のインストールが終わったので疎通していきます
php-fpm設定
設定変更する前にコピーとっておくと良いかもしれません
sudo vi /etc/php-fpm.d/www.conf
下記の内容に更新します
それぞれ/検索ワード
とかで検索して書き換えましょうuser = nginx group = nginx listen.owner = nginx listen.group = nginx listen.mode = 0660 # 以下はお好み pm = static pm.max_children = 5 pm.max_requests = 1500ちなみに、
pm
関係の設定値はデフォルトでも良いです
下記が参考になるので、チューニングしたい方はどうぞ
https://hackers-high.com/linux/php-fpm-config/nginx設定
sudo vi /etc/nginx/nginx.conf
ドキュメントルートは自由に
server { listen 80; listen [::]:80; server_name _; root /var/www; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { root /var/www; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #~中略~確認
sudo mkdir /var/www sudo chmod 777 /var/www cd /var/www echo "<?php phpinfo(); " > index.phpドキュメントルートの内
phpinfo()
だけの、index.php
作ってます
IPをブラウザで確認して、表示されてればPHP使えるようになりましたRDS
AWSにログインしRDS on MySQLでDBを作成しておきます
(参考 -> https://noumenon-th.net/programming/2020/04/10/ec2-rds-laravel/エンドポイントと、ユーザーとパスワードを用いるのでとっておきましょう
EC2にSSH接続し、下記コマンドでmysqlをインストールします
sudo yum install mysql -y終わったら、エンドポイントとユーザー、パスワードを用いて接続します
うまくつながらなかったら、だいたいセキュリティグループとかなので、AWSのRDS等見直してみてくださいmysql -h エンドポイント -u ユーザー名 -p Enter password:つながればOK
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 47 Server version: 8.0.17 Source distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>データベースを作成していなかったら(RDS作成時に指定できる)
CREATE DATABASE
で作成してください
(参考 => https://www.dbonline.jp/mysql/database/index1.html#section1)Laravel
これまででLaravelの下準備は整っています
デプロイの場合もgitからcloneすれば良いので大丈夫ですまずはドキュメントルートに移動します
nginxで/var/www
を指定していたのでそこに移動しますcd /var/www
ComposerからLaravelを入れます
composer create-project --prefer-dist laravel/laravel 【名前】【名前】は自由に
今回はlaravel-app
にしました
ちなみに、Laravelのバージョン指定したい場合、【名前】のあとに、5.8とか6.xとか入れたら良いです
メモリ足りなくて下記のようなエラー出たら、下記の記事の手順でswapを作成してください
https://qiita.com/ntm718/items/88d3fc787f4f18ad1f20mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memoryインストールしたら、指定した名前のディレクトリに移動します
私はlaravel-app
にしたので、今後置き換えてお読みくださいcd laravel-app php artisan key:generate --ansi sudo chmod -R 777 storag sudo chmod -R 777 bootstrap/cache/この段階でブラウザで下記のようにアクセスすると、Laravelの初期画面が出ます
ipアドレス/laravel-app/public
ここまで来たら、あと少しです
vi .env
DBの接続情報を書き換えます
.envDB_CONNECTION=mysql DB_HOST=エンドポイント名 DB_PORT=3306 DB_DATABASE=作ったDB名 DB_USERNAME=ユーザー名 DB_PASSWORD=パスワード保存し、
php artisan migrate
します
ちゃんと実行されたらOKMigration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (51.33ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (38.25ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (39.88ms)最後にドキュメントルートを変更しましょう
現状だとipアドレス/laravel-app/public
なので、laravel-app/public
までをドキュメントルートに設定したら良さそうですねsudo vi /etc/nginx/nginx.conf
laravel
のpublic
がドキュメントルートに来るように修正しますserver { listen 80; listen [::]:80; server_name _; root /var/www/laravel/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { root /var/www/laravel/public; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ~中略~再起動
sudo systemctl restart nginx
ipアドレスにアクセスしたら、laravelの画面が出たら終了
Route53でドメイン設定して、SSLしたらそれっぽくなるはず
ドメイン設定編(事前にEC2とElastic IPを紐付けておく必要あり)
https://qiita.com/ntm718/items/c01fa4fc47d21893974e終わりに
Docker使うならECR ECSのがいいんだろうか
そもそも、個人でやるにはAWSは料金が怖すぎて無料期間あるやつしか使う気がしない...
勉強で作ったらVPSとかのがいいんでしょうか...
- 投稿日:2020-09-15T22:31:49+09:00
PHPUnitでテストデータを使用する際の準備
はじめに
日々学習していて、最近はアプリケーション開発を行っています。しかし、恥ずかしながら今までテストコードを書いたことがありませんでした。
学習用の小さなアプリケーションのため、後回しにしてしまい今に至ります。
実務で基本的に使われると思うので、この小さなアプリケーションの開発だからこそなれるために書いていこうと思います!とはいっても、この記事では具体的に書いたコードを説明するわけではなくテストコードを書く前段階の準備等についてまとめていきます。
対象者:テストコード書いたことがない初心者
バージョン
・PHP:7.3.19
・Laravel:7.20.0PHPUnitについて
PHPUnitとは、PHPのテスト用ツールである。
今回使用するLaravel7.20.0には標準でPHPUnitが使えるためこちらを使用していく!テストコードを書くメリットは?
テストコードを書くことでいろいろなメリットがあると思います。いくつか挙げてみると
- 仕様変更等を行ったときに、その変更によって想定外のエラーが発生した際などに早く気付くことが出来る
- 挙動が仕様と合致しているか確認できる
- 繰り返しテストを行うことが出来る
- テストである程度の品質は確認できるため安心して開発に取り組める
などなど。
やってみよう
まずは、Artisanコマンドでスケルトンの作成
php artisan make:test PracticeTestなにも指定しないとtests/Feature配下に作成される。
Unitテスト用のファイル(tests/Unit配下)を作成したい場合はphp artisan make:test PracticeTest --unitと記載することでできる。
FeatureとUnitの違いとしては、
Unit:関数やメソッド単位でテストを行う
Feature:URL単位の一連の動作に対するテストを行う
というイメージ?※テストファイルの命名規則は、アッパーキャメルケース(単語の最初の文字が大文字)であること。あとは、テストしたいクラス名+Testが基本。
テスト用のデータベースを準備しよう!
テストする際、本番環境のデータベースを使用するのは非常に危険!!!
そのため、テスト用のデータベースを準備する必要があります。1. まずはテスト用のDBを作成
2.phpunit.xmlでテスト用DBについて記載するphpunit.xml<server name="DB_CONNECTION" value="mysql"/> //今回はMySQLを使用するため追加 <server name="DB_DATABASE" value="テスト用DB名"/>3.テスト実行時に、テスト用のDBを使用するようにテスト用の.envファイル(.env.testing)を作成する
.env.exampleの内容をコピー変更点
env.testingAPP_ENV=testing #localからtestingに変更 APP_KEY= 空で #のちに新しく作成する DB_DATABASE=テスト用DBAPP_KEYを新規で作成しないと、.envファイルのAPP_KEYを参照してしまうらしい。
php artisan key:generate --env=testingアプリケーションキーを作った後は、下記コマンドを実行しておこう。
php artisan config:clearあとは、テストコードを書いていけばいける!と思いテストを行ってみましたがいくつか躓いたので記載します。
〇テストデータの削除
テスト用のデータベースを扱う場合、テスト実行後にそのテストデータを削除する必要があります。というのも、テストデータが残っていると、これが原因でエラーが起こる可能性があるためである。
Laravel7系では、RefreshDatabaseを使用することでDBをリセットできる。
RefreshDatabaseとは、各テストの後にDBをリセットしてくれるトレイト。
使用方法は、下記の通りに記載する。[PracticeTest] use Illuminate\Foundation\Testing\RefreshDatabase; class PracticeTest extends TestCase { use RefreshDatabase; }〇Error: Call to a member function connection() on null
調べてみると、Unitテストクラスのひな形のTestCaseが別のクラスを指していることが原因とのこと。下記のように修正することで解決できました。
[PracticeTest] use Tests\TestCase; // PHPUnit\Framework\TestCaseでは×まとめ
ざっくりにはなりますが、PHPUnit使用にあたって必要なことをまとめました。
引き続きテストコードも書いていきたいと思います!
- 投稿日:2020-09-15T21:28:01+09:00
【Windows10】Laragon で Laravel8 (Jetstream + Inertia + Vue) を動かす
Windows環境でLaravelを動かすには色々と方法がある。
- Homesteadを使って仮想環境を立てる(公式推奨?)
- Dockerを使う
- XAMPPでPHPを動かす
- etc ...
今のトレンドだとDockerで環境ごと保存するのが一番?
でも個人的に準備などが面倒臭くて手が出しにくい…
(立ち上げるのが面倒だったり、リソースを食い散らかしたり...)Nodeみたいにローカルで開発できないかなぁ...
XAMPP使うかぁ?という時に Laragon というものを見つけた。
- 様々な言語に対応(PHP, Node.js, Python, Java, Go, Ruby)
- 内部でDBを立ち上げて管理してくれる(mysql, PostgreSQL, mongoDBなど)
- SSLに対応(証明書は無い?)
- 環境変更はボタン一つ
- 新しい構成を追加することも可能
- ポータブルな設計なので移動が簡単
- 要らなくなったらフォルダ削除でOK
- 追加も配置するだけ
- データもプログラムも
- 滅茶苦茶早くて軽い
- 本当に秒で起動する
- フルインスコで130MBのディスク使用量
- 実行時のメモリ使用量も4MB未満らしい
- 設定で
hosts
を自動的に書き換えてくれる
***.test
のリンクを作成(デフォルト)- ngrokを用いたローカルデータの一時的な公開が可能
- 40 connections / minute
と使わない理由が無い内容だったので、折角なので
Laravel8
の開発環境で採用してみた。
(個人的にhosts書き換えがGOD)以下のソフトウェアの使用が強制されるのが注意点?
アップデートで使用するソフトウェアを切り替えれるようになると神になると思う。
- editor として Notepad++
- terminal として Cmder
- DB管理ソフトとして HeidiSQL
- phpMyAdmin も使える
公式サイト
Laravel - ウェブ職人のためのPHPフレームワーク
Laragon - portable, isolated, fast & powerful universal development environment for PHP, Node.js, Python, Java, Go, Ruby.Introduction | Laravel Jetstream
Inertia.js - The Modern MonolithLaragon のインストール
上記リンクから
Laragon
をインストールする。
LiteはNode系が無いバージョンだが、後で簡単に追加できるのでお好みで。
(今回はLaravelでVueを使用したいのでProを採用(Liteだとコンパイルできない...))Laravel8 のインストール
- 「右クリック」>「クイックアプリ作成」>「構成」をクリック
- 勝手にNotepad++が起動する(いつの間に入ったんだろ...)
Laravel8=composer create-project "laravel/laravel=8.*" %s --prefer-dist
を追記- ver 8に固定させるため一応...
- 「右クリック」>「クイックアプリ作成」>「Laravel8」をクリック
- 「右クリック」>「www」> 「<作成したプロジェクト名>」を選択
- Laravelのページが開けたら成功
php artisan serve は必要ない。(そのためのLaragon)
以下のエラーはPHPのversionが足りてないので最新のを取ってくる。
[InvalidArgumentException] Could not find package laravel/laravel with version 8.* in a version installable using your PHP version 7.2.19.
- Laravel8の必要環境は
PHP >= 7.3
- Laragonのupdateはzipを持ってくるだけでOK
- 以下のリンクからPHPのzipを落とす
- https://windows.php.net/download
- 初期に入っていたのはx64のThread Safety版だった
- zipを解凍して「%laragon%/bin/php」に置く
- 「右クリック」>「PHP」>「バージョン[xxx]」>「<導入したversion>」を選択
- リアルタイムに環境が更新されるはず
Laravel Jetstream(Inertia) の導入
DBやjavascriptとの連携を確認したいので認証のテンプレまで入れてみる。
従来の認証周りは8ではJetstreamが担うらしい。
Introduction | Laravel JetstreamJetstream では2つのフロントエンドスタックがある。
- Livewire + Blade Templates (従来のBladeを拡張する)
- Inertia.js + Vue.js (SPA, VueのPropsにControllerからデータを渡せる)
今回はVueを使いたいのでInertiaを選択。
- 「◼ターミナル」をクリック
- 勝手にCmderが開く
cd <プロジェクトdir> // インストール composer require laravel/jetstream php artisan jetstream:install inertia // DB構築 php artisan migrate // nodeセットアップ npm install npm run dev
- Laravelのページの右上に login / register が表示されていれば完成
以下のエラーはデータベースが存在しないので作成しよう。
Illuminate\Database\QueryException SQLSTATE[HY000] [1049] Unknown database 'laravel'
- Laragonの初期設定ではプロジェクト名のデータベースが作成される
- root / no password
所見
適当に垢作ってログインするとテンプレートのダッシュボードが表示される。
標準で二段階認証やセッション管理、API tokenなどが用意されているのは流石。
新たにTeamというroleみたいな仕組みがあるらしいが調査中。このように手軽に遊んだりテストしたりにはLaragonは最適かもしれない。
仮想環境と別の手段として覚えておいても良いかも。
Laravelいいよ!Laragonいいよ!
(Laragonの由来ってもしかしてLaravel…?)
- 投稿日:2020-09-15T16:59:26+09:00
【Curlコマンド】 忘れがちなAPIの動作確認の方法
本記事の目的
アプリ開発をしているとサーバサイドでAPIを開発する機会が多いと思います。
また外部サービスともAPIを通じて連携する機会も多いと思います。
備忘録も兼ねてAPIの疎通を確認する際に使用するCurlコマンドについて記載していきます。おまけになりますがLaravelでのBearerトークンの受取る方法なども記載しております。
基礎:POSTリクエスト
# -X POSTを指定することでPOSTでリクエストすることが出来ます。 # -d パラメータを指定することが出来ます。(複数のパラメータを指定する場合は&で繋ぐこと) $ curl -X POST https://hogehoge/api/v1/sample -d "name=tester&age=24"基礎:GETリクエスト
# -X GETを指定することでGETでリクエストすることが出来ます。 $ curl -X POST https://hogehoge/api/v1/sample?name=tester&age=24基礎:HTTP Headerを指定する
# -H HTTP Headerを付与することが出来ます。(複数ある場合は-Hを複数記載する) $ curl -X POST 'https://hogehoge/api/v1/sample' -H 'Content-Type: application/json;charset=utf-8' -H 'Accept-Charset: utf-8'基礎:Bearer Tokenを指定する
$ curl -X POST 'https://hogehoge/api/v1/sample' -H 'Content-Type: application/json;charset=utf-8' -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'基礎:JSONパラメータを指定する
$ curl -X POST 'https://hogehoge/api/v1/sample' -H 'Content-Type: application/json;charset=utf-8' -d '{"name":"tester", "age":"24"}'応用:Bearer Token + JSONパラメータを指定する
$ curl -X POST 'https://hogehoge/api/v1/sample' -H 'Content-Type: application/json;charset=utf-8' -H 'Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -d '{"name":"tester", "age":"24"}'豆知識:[Laravel] Bearer Tokenの取得方法
# HTTPヘッダーからBearer Tokenを取得する。 $bearer_token = $request->bearerToken();豆知識:[Laravel] パラメーターの取得方法
# パラメーターを取得する。 $name = $request->name; $age = $request->age;
- 投稿日:2020-09-15T14:15:11+09:00
Laravel8 AppかApp\ModelsにModelファイルがない場合にdatabase/factoryは同じフォルダ構成にしないと動かない
Laravel 8にアップグレードして、testを実行したところfactoryのファイルが見つからないとエラーが出ました。
(ModelにHasFactoryは追加済)
Class 'Database\Factories\Infrastructure\Eloquents\Models\PostFactory' not found
実際ファイルは下記のように配置していたのでパスが一致してません。
Database\Factories\PostFactory修正前PostFactory.php<?php declare(strict_types=1); // Factoriesの直下に配置 namespace Database\Factories; use App\Infrastructure\Eloquents\Models\Post; use Illuminate\Database\Eloquent\Factories\Factory; class PostFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = Post::class; /** * Define the model's default state. * * @return array */ public function definition() { return [ 'name'=> 'test' ]; } }エラーの該当箇所を見ると、AppかApp\Models以外にmodel.phpが置かれている場合にエラーになるようです。
今回のプロジェクトではInfrastructure\Eloquents\Models配下にModel類を置いているので今更変えるのは難しいです。Factory.phppublic static function resolveFactoryName(string $modelName) { $resolver = static::$factoryNameResolver ?: function (string $modelName) { $modelName = Str::startsWith($modelName, 'App\\Models\\') ? Str::after($modelName, 'App\\Models\\') : Str::after($modelName, 'App\\'); return static::$namespace.$modelName.'Factory'; }; return $resolver($modelName); }参考記事にあるようにDatabase\Factories配下にModelフォルダと同じフォルダ構成を作成すれば良さそう。
例
PostFactory.php<?php declare(strict_types=1); // PostModelの配置場所と同じ構成にする namespace Database\Factories\Infrastructure\Eloquents\Models; use App\Infrastructure\Eloquents\Models\Post; use Illuminate\Database\Eloquent\Factories\Factory; class PostFactory extends Factory { /** * The name of the factory's corresponding model. * * @var string */ protected $model = Post::class; /** * Define the model's default state. * * @return array */ public function definition() { return [ 'name'=> 'test' ]; } }無事テストが通過するようになりました!
参考記事
https://laracasts.com/discuss/channels/laravel/laravel-8-model-factory-namespaces
- 投稿日:2020-09-15T11:34:55+09:00
laravelでbootstrapテンプレートを使うときに学んだメモ
ビューファイルは、resources/viewsの中に入れることで読み込む。
css,jsなどは、publicに入れることで読み込む。
htmlファイルは、.blade.phpに変換することで@csrfなど直接phpコードを書き込む事ができる。
※ .phpではダメで、.blade.php出ないと@csrfなどは使う事ができない。bootstrapテンプレートなどを使ってlaravel使う場合は以下のようになる。
- DLしたテンプレートをプロジェクト内に入れる。
- テンプレート内のviewファイルをresources/viewsに入れる。
- 残りを全てpublicに入れる。
- htmlファイルを、.blade.phpに変換する。
- 要らないファイルなどがあれば整理する。
- ディレクトリ階層が変わるので、viewのimgタグなどを修正する。(描画して検証にかけるとエラーを吐くのでそこを修正していくと早い)
これでテンプレートを使う事ができるはず。
- 投稿日:2020-09-15T11:01:24+09:00
LaravelのdispatchNowでObject of class App\Jobs\XXX could not be converted to string
- 投稿日:2020-09-15T00:21:14+09:00
laravel-admin でRowAction の表示方式を変更する
環境
- Laravel Framework 8.2.0
- laravel-admin 1.8.4
経緯
laravel-admin 1.8.4 では RowAction はハンバーガーメニューみたいな形式になってるが、ドキュメントの TOP のスクリーンショットにあるようなリンク形式にしたくて若干ハマった。
こんなの変更方法
config/admin.php/* |-------------------------------------------------------------------------- | The global Grid action display class. |-------------------------------------------------------------------------- */ 'grid_action_class' => \Encore\Admin\Grid\Displayers\DropdownActions::class,
config/admin.php
内のgrid_action_class
を\Encore\Admin\Grid\Displayers\Actions::class
に変更するだけで良かった。改めてドキュメントを見るとこの辺で
grid_action_class
について書いてるけど古い方式だから(?)触れられていないのかな?
https://laravel-admin.org/docs/en/model-grid-custom-actions#Old%20version%20compatibleもう少しカスタマイズする
Actions::render(View|Edit|Delete)
をオーバーライドする。
renderDelete
はクラスやデータ属性を下手に消すと削除用のスクリプトが動かなくなるので注意。CustomActions.php<?php namespace App\Admin\Grid\Displayers; use Encore\Admin\Grid\Displayers\Actions; class CustomActions extends Actions { protected function renderView() { return <<<EOT <a href="{$this->getResource()}/{$this->getRouteKey()}" class="{$this->grid->getGridRowName()}-view btn btn-sm btn-default"> <i class="fa fa-eye"></i> View </a> EOT; } protected function renderEdit() { return <<<EOT <a href="{$this->getResource()}/{$this->getRouteKey()}/edit" class="{$this->grid->getGridRowName()}-edit btn btn-sm btn-default"> <i class="fa fa-edit"></i> Edit </a> EOT; } protected function renderDelete() { $this->setupDeleteScript(); return <<<EOT <a href="javascript:void(0);" data-id="{$this->getKey()}" class="{$this->grid->getGridRowName()}-delete btn btn-sm btn-default"> <i class="fa fa-trash"></i> Delete </a> EOT; } }
config/admin.php
を修正。/* |-------------------------------------------------------------------------- | The global Grid action display class. |-------------------------------------------------------------------------- */ - 'grid_action_class' => \Encore\Admin\Grid\Displayers\Actions::class, + 'grid_action_class' => \App\Admin\Grid\Displayers\CustomActions::class,