zohoサーバーを使ったlaravelのメール設定
一回諦めたけど、諦めきれなくて再チャレンジして成功したので投稿します。備忘録
何故メール設定がエラーだったか
①DNSのレコード設定が未完了だった
原因不明ですが、zohoサイドでTXTレコードの設定だけ完了されていなく、これが認証できない理由だったようです。
②.envの書きかた
この通りです。USERNAMEとFROM_ADDRESSは同じものとする。zohoさんで作ったドメインメールです。
そして、PASSWORDはzohoさんで生成してもらったアプリ専用パスワードを入れます。
サーバ構築手順書 ubunutu22
1.adduser
2..ssh以下で scp 鍵の名前_rsa.pub username@IP:~/
3.ログインしてmkdir .ssh
4.chmod 700 .ssh
5.cat 鍵の名前_rsa.pub >> .ssh/authorized_keys
6.rm 鍵の名前_rsa.pub
7.chmod 600 .ssh/authorized_keys
8.exitして公開鍵でログインしてみる -i~/.ssh/鍵の名前_rsa.pub
9.rootに移動
10.cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old
11.vim /etc/ssh/sshd_config PORT ROOTLOGIN PASSOWORDの三点
sudo ufw allow 変えた番号 (80 443も)
sudo ufw enable
sudo ufw status numeredで確認
12.systemctl restart ssh.service
ログインし直して確認する
///////////////////////////////////////////////////////////////
// Ubuntu22.04 server create manual
// php:8.1.2
// apache:2.4.52
// mysql:8.0.29
// laravel:9.13.0
// composer:2.2.6
// npm:8.5.1
///////////////////////////////////////////////////////////////
---------------------------------------------------------------
【Ubuntu update】
root下で
sudo apt update -y
sudo apt upgrade -y
---------------------------------------------------------------
【php install】
sudo apt install php -y
sudo apt install php8.1-dom -y
sudo apt install php-curl -y
---------------------------------------------------------------
【composer install】
gpasswd -a ユーザー名 sudo
sudo apt install composer -y
---------------------------------------------------------------
【npm install】
sudo apt install npm -y
---------------------------------------------------------------
【mysql install】
sudo apt install php8.1-mysql
sudo apt install mysql-server -y
【mysql setting】
sudo mysql -uroot -p
--> no pass
//////////////////////////////////////////////////////////////
// task in mysql
//////////////////////////////////////////////////////////////
CREATE DATABASE laravel;
CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'Password_000';
GRANT ALL ON laravel.* TO 'dbuser'@'localhost';
FLUSH PRIVILEGES;
exit;
//////////////////////////////////////////////////////////////
---------------------------------------------------------------
【laravel project create】
cd /var/www/html
sudo composer create-project laravel/laravel AppName
cd AppName
sudo chmod -R 777 ./storage
【env file edit】
sudo vi .env
-->DB_USERNAME = dbuser
-->DB_USERNAME = Password_000
sudo php artisan migrate
---------------------------------------------------------------
【apache setting】アプリ名注意!
sudo vi /etc/apache2/sites-available/000-default.conf
//before//////////////////////////////////////////////////////
DocumentRoot /var/www/html
//////////////////////////////////////////////////////////////
-->
//after///////////////////////////////////////////////////////
DocumentRoot /var/www/html/AppName/public
<Directory /var/www/html/AppName/public>
AllowOverride All
</Directory>
//////////////////////////////////////////////////////////////
sudo a2enmod rewrite
exit
laravel画面が出るか確認
1./var/www/html/下で sudo git clone https://username@github.......
2.sudo chown -R user:user ./で書き込み権限を付与
3..新しいディレクトリ下でcomposer install
エラーが出たら指示通り--ignore-XXを付けてインストール
4.sudo vi .env
-->DB_USERNAME = dbuserとは異なる名前を付ける
-->DB_USERNAME = Password_000
5.php artisan key:generate
6.php artisan migrate
7.php artisan config:cache
※おかしいとき、systemctl status apache2.serviceでApacheの確認
sudo apt install certbot python3-certbot-apache
cd /etc/apache2/sites-availableして以下にオリジナル.confを
cp 000-default.conf オリジナル.conf
ServerName your_domain
ServerAlias www.your_domain
sudo service apache2 restart
sudo certbot --apache
以下、ファイル変更後はsshと繋げたローカルのVScodeでいつものpushまでして、サーバの対象フォルダ下でgit pullすればOK
※npm install や runなど以外は全てローカルでする
一応
php artisan storage:link
Too few arguments to function
laravel8利用。Too few arguments to functionのエラーメッセージが出た時の対応例です。
public function uploadpic(Request $request,$id)
では引数が少ないということですが、何を足せばいいか分からず代わりに$id を取ったら解決しました。
このfunctionでは、idではなくアップロードした画像が$requestであり、$idとは異なるからなんでしょうかね。なんでも、(Request $request, $id)を入れる癖をそろそろ辞めたいですね。
異なるデータテーブルでのデータの利用
laravel8です。コントローラー内で異なるデータテーブルのデータを利用するときの書き方の一例です。
①を書かずに、②に$request->user_nameを入れればいけると思ったのですが、これではデータが取得出来ませんでした。
①を書くことで、新たな変数$tspointがWordテーブルから必要なデータを取得してくれています。そして、$tspointが出来たことで次の行でUserテーブルとWordテーブルと組み合わせて利用できるようになります。
変数、大事ですね!
radioボタンとtextを同じカラムにする
Laravel8です。入力エリアでradioボタンとtext入力を同じカラムに入れたいときの対応例です。
blade画面
この二点を同じカラムに入れるのですが、radioボタンとtextを異なるnameとidに変える必要があります。
Controller画面
もちろん、バリデーションに追加します。そして、ここでDBへの渡し方がポイントです。
$word->test_name = $request->test_type.$request->test_name;
"."を使うことで二つのデータを結合してくれます。(初めて使ったかも)
セレクトボックスを使ったデータの渡し方
laravel8 です。登録画面に都道府県のプルダウンセレクトメニュー(select box)を作ったときのおさらいです。
①ここでデータテーブルに入れるカラム名を指定します。
②よって、この$keyと$valueはここだけの仮の変数なので、①と重ならないように気を付けてください。
③渡したい変数をここに入れます。
$idの使い方・取得(laravel8)
laravel8で作成中。コントローラー内functionでよく使う$id。使い方の一例です。
$word = Word::find($id);
このコードで$idで受け取ったid番号に紐づいたモデル名Word内にあるデータをfind(採択?)します。このコードを書くことで、以下で$word->が機能します。