- 投稿日:2019-11-28T22:51:01+09:00
[Laravel]シーディングができなかった原因
UserTableSeederとFoldersTableSeederの二つをシーディングしたかったのだがうまくいかない
UserTableSeederclass UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { DB::table("users")->insert([ "name" => "test", 'email' => 'dummy@email.com', 'password' => bcrypt('test1234'), 'created_at' => Carbon::now(), 'updated_at' => Carbon::now(), ]); } }FoldersTableSeederclass FoldersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $user = DB::table("users")->first(); $titles = ["プライベート","仕事","旅行"]; foreach ($titles as $title) { DB::table("folders")->insert([ "title" => $title, "user_id" => $user->id, "created_at" => Carbon::now(), "updated_at" => Carbon::now(), ]); } } }シーディングしようとするとこのエラーメッセージが出る
>php artisan db:seed In FoldersTableSeeder.php Trying to get property 'id' of non-objectFoldersTableSeederの「存在しないidというプロパティを取得しようとしている」。
「"user_id" => $user->id」の部分「id」が存在しない?これはそもそもfirstメソッドでuserテーブルから取得したものだった。
もしかしてまだuserテーブルのシーディングができていないためデータがないのでは?そこでuserテーブルから個別にシーディングすると
>php artisan db:seed --class=UsersTableSeeder Database seeding completed successfully. >php artisan db:seed --class=FoldersTableSeeder Database seeding completed successfully.成功。
やはりそういうことだったらしい。
複数のシーディングを同時に行うとテーブル間の関係がある場合うまくいかないことがあるようだ。
- 投稿日:2019-11-28T22:41:12+09:00
php7.4のLaravel環境をDockerでつくる
はじめに
DockerでLaravel環境作ってログインできるまでをハンズオン形式で進めます。
ローカル環境ちゃちゃっと作って開発したい人向けなので、詳細説明はありません。
せっかくなので最近リリースされたPHP7.4を使ってみます。環境
- php7.4
- Apache2
- MySQL5.7
0. 事前準備
0-1. Dockerインストール
Mac,Windows ProならDocker、Homeならdocker toolbox
dockerならHyper-V設定も忘れずに会社でよくあるWindowsProなら↓を参考に
https://www.koreyome.com/web/docker-install-for-windows/
0. CPU仮想環境設定を確認
1. Hyper-V設定
2. Dockerインストール
3. docker-composeインストール確認
$ docker-compose -v0-2. VSCodeのターミナルを準備(任意)
初心者でもつまずかないよう統一して VSCode の Terminal を git bash にしています。
GitBashは入っている前提です。
- setting表示 (Ctl+,)
- terminal.integrated.shell.windows 入力
- Edit in settings.json 選択
- GitBash 選択
(例)"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"
- Terminal表示(Ctl+Shift+@)
- 1:bash になる
1. ディレクトリ構成とファイル作成
githubからcloneするか、ファイルを作成してください。
1-1. クローンする場合
git clone https://github.com/qvtec/laravel-docker-base.git2-1. ファイルを作成する場合
ディレクトリ構成は下記のようになります
docker ├── db │ └── my.conf ├── php-apache │ ├── 000-default.conf │ ├── default-ssl.conf │ ├── php.ini │ └── Dockerfile ├── .env └── docker-compose.ymlDockerfile 作成
composer も node もインストールしているので、別コンテナにしてもいいかもしれません
DockerfileFROM php:7.4.0-apache COPY ./php.ini /usr/local/etc/php/ COPY ./sites/*.conf /etc/apache2/sites-available/ ARG TZ=Asia/Tokyo ARG NODE_VERSION=8.x RUN set -xe; \ apt-get update -yqq && \ apt-get install -yqq --no-install-recommends \ apt-utils vim gettext git \ default-mysql-client \ # for gd libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libwebp-dev \ libxpm-dev \ # for ImageMagick libmagickwand-dev \ # for zip libzip-dev zip unzip \ # for oniguruma libonig-dev \ && docker-php-ext-install bcmath gettext mbstring mysqli pdo pdo_mysql zip \ && docker-php-ext-configure mbstring --disable-mbregex \ && docker-php-ext-configure zip --with-libzip \ # gd && docker-php-ext-install -j$(nproc) iconv \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd \ # imagick && pecl install imagick \ && docker-php-ext-enable imagick \ # enable mod_rewrite && a2enmod rewrite \ # enable ssl && a2enmod ssl \ # enable site && a2ensite default-ssl \ # for ssl && apt-get update \ && apt-get -y install ngrep \ && openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=JP/CN=localhost" \ -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt \ # set timezone && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ # node && curl -sL https://deb.nodesource.com/setup_$NODE_VERSION | bash - \ && apt-get install -y nodejs npm \ # install composer && cd '/' \ && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ && php composer-setup.php \ && php -r "unlink('composer-setup.php');" \ && mv composer.phar /usr/local/bin/composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin # laravel installer RUN composer global require "laravel/installer" \ && composer global require "laravel/envoy" WORKDIR /var/www/htmldocker-compose.yml 作成
docker-compose.ymlversion: '3' services: work: build: context: ./php volumes: - ${PROJECT_PATH}:/var/www/html:cached - node_modules:/var/www/html/node_modules ports: - ${WEB_PORT}:80 - ${WEB_SSL_PORT}:443 depends_on: - mysql mysql: image: mysql:5.7 volumes: - mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: ${DB_NAME} MYSQL_USER: ${DB_USER} MYSQL_PASSWORD: ${DB_PASS} TZ: ${TZ} ports: - ${DB_PORT}:3306 phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=root ports: - ${PMA_PORT}:80 redis: image: redis:latest ports: - ${REDIS_PORT}:6379 volumes: - redis_data:/data command: redis-server volumes: mysql_data: node_modules: redis_data:.env 作成
COMPOSE_PROJECT_NAME はプロジェクト名に変更する
使っていないポートにする.envCOMPOSE_PROJECT_NAME=laravel-docker-base PROJECT_PATH=../src WEB_PORT=80 WEB_SSL_PORT=443 DB_PORT=3306 PMA_PORT=8080 REDIS_PORT=6379 TZ=Asia/Tokyo DB_NAME=docker DB_USER=docker DB_PASS=secretapache conf 作成
httpとhttpsの両方を作成します
000-default.conf<VirtualHost *:80> ServerName local.test.com DocumentRoot /var/www/html/public/ <Directory /var/www/html/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined </VirtualHost>ssl が不要の場合は、下記ファイルが不要で
Dockerfile のa2ensite default-ssl
と # for ssl の項目を削除するdefault-ssl.conf<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName local.test.com DocumentRoot /var/www/html/public ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> Options Indexes FollowSymLinks <Directory "/var/www/html/public/"> AllowOverride All Require all granted </Directory> </VirtualHost> </IfModule>php 設定ファイル
php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"mysql 設定ファイル
my.conf[mysqld] character-set-server=utf8 datadir = /var/lib/mysql2. Docker起動
2-1. docker設定ファイルの作成
cloneしている場合は.env.exampleをコピーして.envを修正する
cd docker/ cp .env.example .env2-2. ビルドと起動
docker-compose up -d --build2-3. コンテナ接続
docker-compose exec work bash
3. Laravelインストール
workコンテナで実行する
3-0. Laravelプロジェクト作成
laravel new3-1. Laravel設定ファイル
cp .env.example .env
DB_HOST=mysql DB_USSERNAME=root DB_PASSWORD=root CACHE_DRIVER=redis REDIS_HOST=redis MAIL_DRIVER=log3-2. composer install
composer dump-autoload composer install3-3. マイグレーション
php artisan migrate4. hosts設定と表示
127.0.0.1 local.admin.com表示できましたか?
エラー対応
ハンズオンでエラーになった人がいたので対処法
ERROR: for web Cannot create container for service web: b'Drive sharing failed for an unknown reason'
ERROR: Encountered errors while bringing up the project.bドライブ使ってないと思うので、dockerの設定変更が必要
http://kdnakt.hatenablog.com/entry/2019/09/12/080000xamppでmysqlが接続できなくなった
ポート変更が必要
.envで3306→3316とか使ってないポートに変更するさいごに
laradockを使っていましたが遅かったので、phpの公式のphp-apacheを使うようになりました。
まだdocker歴が短いので、ベストな状態かはわかりません。
なにかあれば教えてください。
- 投稿日:2019-11-28T20:25:24+09:00
LaravelのHerokuへのデプロイ、DBはMySQL。
データベースにMYSQLを使う
HerokuではデータベースとしてPostgreSQLになっているため、アプリごとにClearDBを入れなければならない。利用にはクレジットカードが必要。(ClearDBの利用自体は無料)
$ heroku addons:add cleardb上記にコマンドの入力またはHerokuのサイトのsettingタブから導入できる。
Procfile を作成する
ProcfileというHerokuの設定ファイルを作成。サーバーにApacheを使うこと、public/をドキュメントルートとすることを宣言するために使います。アプリフォルダの直下に作成する。
Procfileweb: vendor/bin/heroku-php-apache2 public/中身は上記のように。
環境変数の設定
どの項目を登録すべきかよくわからなかったためいろいろやってみたが注意すべきはDBに関する項目。
DB_DATABASE=[データベース名]
DB_HOST=[ホスト名]
DB_USERNAME=[ユーザー名]
DB_PASSWORD=[パスワード]これらはenvファイルの設定ではなくclearDBの設定で、そのURL内にある。下記コマンドで表示。
heroku config:get CLEARDB_DATABASE_URL #URLが表示される mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=trueまたセキュリティ関連のAPP_KEYの設定も必須。
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)envファイルのAPP_KEYの項目をartisanコマンドで取得
HerokuのMYSQLにmigrateする
自分はここに一番時間を取られた。マイグレーションがうまくいかない。
Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes何度やってもこのエラーメッセージが出てくる。訳すと「指定されたキーは長すぎます。キーの長さは最大767バイトです。」
調べていくとvarchar型の文字数を191に制限しなければこのエラーが出るらしい。
app\Providers\AppServiceProvider.phpに以下を追加。
AppServieProvider.phpuse Illuminate\Support\Facades\Schema; public function boot() { Schema::defaultStringLength(191); }自分はSchemaクラスをuseするのを忘れていたため時間がとられてしまった。
use Illuminate\Support\Facades\Schema;を忘れないように。デプロイする
HerokuではアプリをGitを利用してデプロイする。自分はGitも初心者だったためここでもかなり時間を要した。
まずはHerokuのアプリをリモートとして登録
git init heroku git:remote -a <herokuのアプリ名>ローカルリポジトリにコミットし
git add . git commit -m "コミットメッセージ"プッシュすることによりデプロイする
git push heroku master問題がなければheroku openでサイトを開くことができる
heroku open
思った以上に時間がかかってしまった。自分が犯していた間違いはdevelopブランチにProcfileファイルを作成し、マージしないままmasterをプッシュをしていたこと。そのほかにもGitの基本的な操作ができていなかった。HerokuよりもGitに慣れていないことを痛感させられた。
- 投稿日:2019-11-28T19:44:01+09:00
【Laravel5.8】PHP7.4でTrying to access array offset on valueが山盛り出るようになった
Laravel5.8で試したからLaravel5.8としているだけで、他のバージョンや、あるいは他のフレームワークでも発生すると思います。
で、PHP7.4からスカラー型変数に配列アクセスするとE_NOTICEが出るようになりました。
$a = null; echo $a[1];これはPHP7.3までは何も言いませんでしたが、7.4ではE_NOTICEが発生します。
さらにPHP8ではE_WARNINGになる予定です。これの何が問題って、値が入ってるかどうかわからないテーブルにリレーション張ってる場合ですよ。
テーブルAのモデルclass TableA extends Model{ /** * テーブルBへのリレーション */ public function TableB() { return $this->belongsTo(\path\to\TableB::class, 'b_id', 'id'); } }コントローラはwithで引っ張ってきてbladeに投げるだけ。
コントローラ$tableAs = TableA::with(['TableB'])->get(); return view('hoge.blade.php', [$tableAs]);ビューではなんか適当に表示。
hoge.blade.php@foreach ($tableAs as $tableA) ID: {{ $tableA->id }} Bの値: {{ $tableA->TableB['name'] }} @endforeachテンプレートはだいたいこんな書き方をしてると思うのですが、というか私がしてるのですが、テーブルBに値が無かった場合、これまで"Bの値"は単に空白になっていました。
PHP7.4に上げた瞬間、至る所でLaravelがErrorExceptionを吐くようになってえらいことになりましたよ。根本的に正しく解決するにはどうすればいいのかはよくわかりませんが、とりあえず
Bの値: {{ $tableA->TableB['name'] ?? '' }}ってすることで事なきを得た。
事なきを得たと思ったんですが、実はこれLaravel本体側でも発生するんですよね。
確認したところではemailバリデータを使うと出てきます。
そのうち修正されるとは思いますが、先にLaravelのアップデートを終わらせるまでPHP本体のアプデは待った方がよいでしょう。
- 投稿日:2019-11-28T16:43:20+09:00
Laravel6.0始める前にMacのphpは7.2以上にすべき話【対策を解説】
Laravel6.0を遂に試してみようということで、
いつもの通り、
$ composer create-project laravel/laravel qiita --prefer-dist "6.0.*"とバージョンを指定して、composerでプロジェクトを作成しようとしました。
そしたら、エラーが出てしまいました。
理由は、
Laravel6.0はpcのphpが7.2以上である必要がある
ということでした。
MAMPはphp7.3.1なのになんでやと思ってたんですが、pcは7.1.2だったんですね...
ということで、
pc(Mac)のphpのバージョンを7.3~にあげる方法を解説します
前提環境
MacOS MOjave 10.14.5
composerインストール済み
homebrewインストール済みhomebrewまだの人は各自インストールお願いします?
brewコマンドでphpをインストールする
まずはbrewコマンドでphp7系を検索してください。
$ brew search php@7すると、以下の画面になります。
==> Formulae php@7.1 php@7.2 php@7.3そしたら、以下のコマンドを入力してください。
$ brew install php@7.3これでphp7.3がインストールされます。
一応コマンドでバージョンを確認します。
$ php -vやったぜ
- 投稿日:2019-11-28T16:43:13+09:00
RailsとLaravelの比較
はじめに
この記事はRailsとLaravelを比較分析してみた記事です.
Railsは以前から勉強していて,新たにLaravelを使ってみました.
Railsの勉強にはRuby on Rails 5 超入門と改訂4版 基礎 Ruby on Rails (IMPRESS KISO SERIES)を使いました.
Ruby on Rails 5 超入門についてはチュートリアル形式で一見わかりやすいのですが,誤植などが多いのとレベルが優しすぎるのであまりオススメしません.Laravelの勉強はPHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応を使いました.買う前に中身を確認しなかった僕が悪いのですが,本の厚さの割に内容が薄いです.また辞書的に使う分には良いのですが,チュートリアル形式で作っていく感じではないので,フレームワークを使ったことのない人などにはオススメ出来ません.
RailsとLaravelの基本情報
*以下,2019/11/28現在の情報
Rails Laravel 言語 Ruby PHP 初リリース 2004年 2011年 github https://github.com/rails/rails https://github.com/laravel/framework github start数 44.6K 19.5K githubのstart数ではrailsの方がLarvelの倍くらいの数になっています.Railsはいま流行りと個人的に思っていたりするのですが,リリースからはもう10年以上経過していました.
Googleトレンドで調べてみた
Googleトレンドでは検索のトレンドを調べて,検索キーワードで比較したりできるサービスです.Googleは面白いサービスを作っていますね.
これを使ってRailsとLaravelについて調べてみました.すべての国
https://trends.google.co.jp/trends/explore?date=all&q=Rails,Laravel
日本
https://trends.google.co.jp/trends/explore?date=all&geo=JP&q=Rails,Laravel
Laravelはリリースが2011年なので,2012年頃まではほぼ0です.
全ての国
の場合ではLaravelがRailsをやや追い越したくらいになっています.日本
の場合ではまだRailsを追いかけていますが,このままの状態が続くと追い越しそうです.個人的分析
ここからはRailsとLaravelを使ってみた感想になります.
本,参考資料などの多さは? 勝者:Rails
Railsの方がネットでググったときなどの参考になる記事などが多いです.それはRailsで使われている言語のRubyの開発者が日本人(まつもとゆきひろ氏)なのでRubyの日本語資料がそもそも多いという点と,Laravelより7年早くリリースしているからかなと思っています.
*IT分野の中で日本発祥の技術はRubyと深層学習のChainerくらいしか知らない(他にあったらコメントください)のでRubyは本当すごいです.
勉強のしやすさは? 勝者:Rails
難易度的にもRailsとLaravelは遜色ないですが,やはり本や参考資料などが多い方が勉強しやすいです.以前Go言語のフレームワークのGinを使う機会があったのですが,公式以外のドキュメントが少なくて開発しにくかったことがあります.
使いやすさは? 同じ
- railsには
scaffold
という色々必要なものを一発で作ってくれるコマンドがあるのですが,Laravelは標準でサポートしていません(あるけど,githubの更新も止まっているのでバージョンに寄っては今後使えなくなるかも).- Laravelは比較的命名規則などが緩いので,ネットで調べても色々な書き方をしているのでわかりにくいです.
- 逆にRailsは規則が厳しいのですが,厳しいが故に,変数名などを修正するのが億劫になります.
- Laravelはデフォルトでログイン認証などが入っているので,インストールなどの手間が省けます.
RailsとLaravelのどっちがいいの? 若干Laravelかな
ここまで読んだ人にはRailsの方が良い感じに見えますが,他のエンジニアの人の意見を聞くと
「Railsは比較的開発が速くできるからスタートアップに多いが,保守・運用や難しい機能にはRailsは向いておらず,JavaやPHPのフレームワークの方が開発が容易」
という意見が多かったです(社会人になって1ヶ月くらいなのでこの辺は自分の中で不確定要素).確かに求人とか見てるとPHPとかJavaの募集の方が多いなという印象を持ったのでLaravelとしました.
まとめ
Railsが最強(僕の大学の教授)という人もいれば,Railsはオワコンと言っている人もいますのでどうなんですかね...
僕の周囲ではRailsの方がよく耳にします.
Rails,LarvelはRubyとPHPという言語の違いは多少ありますが,考え方や使い方はほとんど同じです.個人的には勉強のしやすいRailsを最初にやってMVCの基礎を勉強して,Laravelとかに移ればいいかなと思います.
- 投稿日:2019-11-28T13:28:55+09:00
51歳からのプログラミング 備忘 XREA様の無料サーバーに ローカル Laravel のプロジェクトをアップロード
Laravelを導入するだけで丸1日潰れた。でも、先輩方がサイトで記録を残してくれているので、こんな僕でもなんとか独学で!参考にするのなら、他のサイトがおすすめ!
参考サイト様
下記様、大変にお世話になりました。ありがとうございます!
tanidaiz.com様
@haessal様
@t_mitarai様はじめに
無料レンタルサーバーは XREA様
方法は、XREAに、
・ teraTarmを使って、ローカルで作成したLaravelをアップロードする方法
XREAのファイルマネージャーでもZIPをあげられるSSH登録と許可
説明 XREA無料版の登録 XREAにログインして無料版を申し込む SSH登録 alue-domain GMO管理画面・コントロールパネル
↓
サーバー/XREA
↓
コントロールパネル/ウェブ
↓
FTP設定で「SSH登録」を選択SSH許可 XREA
↓
サイト設定
↓
ツール/セキュリティ
↓
SSH接続IP許可SSH接続
teraTermの場合なら
teraTerm起動
・ ドメイン(IPアドレス)
・ ユーザー(FTP設定のアカウント)
・ パスフレーズ(FTPのパスワード)
を入力
説明 ドメイン alue-domain GMO
↓
コントロールパネル
↓
アカウント@サーバー/「IPアドレス XXX.XXX.XXX.XXX」のIPアドレスUserとPass XREA
↓
サイト設定
↓
FTP設定」
↓
アカウントとパスワードcomposerの導入
説明はこちら-> composer installation
XREAでは、phpコマンドはCLI版を使うそうです。
導入するlaravelで用いるPHPのversionを確認しましょう。
XREAのPHP、laravelのPHP、コマンドに使うPHP($ php72cli)の各PHP versionは揃えましょう!teraTarmで、root直下(/virtual/UserAccount/)に入って、下記を実行するんだコレ!
$ php72cli -r "copy('... $ php72cli -r "if(... $ php72cli composer-setup.php $ php72cli -r "unlink(...composerを起動
そして、composerをインストした階層で下記を実行するんだコレ!
$ php72cli composer.phar // ↓ // COMPOSERのかっこいいのが表示されるLaravelの導入
ローカルで開発したlaravelをXREAにUPロード!
・ laravelファイルをZIPなどで圧縮
・ アップローダーでZipをアップ!
teraTarmならクリックドロップ!
XREAのファイルマネージャーなら、ZIP形式でアップロードを選択!
(これだとアップロード時に解凍してくれる!)
・ 不要なファイル(phpunit)を削除!teraTarm で zip を解凍するのは
$ unzip myProject.zipそしたら次に artisan key:generate します
virtual/UserAccount/laravel/myProject/// myprojectに入って以下を行います $ php72cli artisan key:generatemyProject/publicを、public_html(DocumentRoot)に移動します。
/virtual/UserAccount/public_html -- index.php
|- .htaccess
|- favicon.ico
|- robots.txt
って感じにします。
そしたらindex.phpを変更します。
このままだと、index.php の require ./autoload.php で require されずに 500 エラーになります。index.htmlの変更
/public_html/index.php を以下のように修正
// ↓ require __DIR__.'/../vendor/autoload.php'; require '/virtual/UserAccount/laravel/myProject/vendor/autoload.php'; // ↓ $app = require_once __DIR__.'/../bootstrap/app.php'; $app = require_once '/virtual/UserAccount/laravel/myProject/bootstrap/app.php';これで大丈夫かな?
http://UserAcount.xxx/
でアクセス!Error
Whoops, looks like something went wrong
phpのバージョンが違っているので、表示できません、っていうエラー?。
Whoops, looks like something went wrong. (1/1) FatalThrowableError Parse error: syntax error, unexpected '?', expecting variable (T_VARIABLE) in Translator.php line 91XREAで使っているPHPバージョンと、導入したlaravelで使ってるPHPバージョンがあってなかった、ってことでした。
ローカルのlaravel XREAのlaravel XREAのphp teraTermのphp の各レベルは合わせるのが吉かな?
laravel導入時に、phpunit系のエラーが出て中断
php72cli -d register_argc_argv=1 composer.phar create-project --no-dev --prefer-dist laravel/.....--no-devでインストールしないように指定したんだけれど、
Your requirments could not be resolvel to an installable set of packages Problem 1 -phpunit/phpunit ... ...というレッドエラーが出た。
すべてphpunitエラーなので、今回はインストールで--no-devは指定せず、エラー発生後にディレクトリーからphpunitを削除して、再インストールすることにしたよ。削除方法はいろいろあるけれど、今回は、
XARE - サイト設定 - FTP設定 - ファイルマネージャー - laravelホルダ - phpunit 削除
で、他のファイルを確認しながら削除してみました。再インストールね!
$ php72cli -d register_argc_argv=1 composer.phar update
http://www.UserDomain/myProject
無事に
導入したLaravelファイルが見当たらない! No such file or directory
これは迷いました!
調べてたら、転送する時の文字コードが違うのでは(エンコード)?とか出てきましたが、最終的にLaravelプロジェクトの名前がよくなかったよう。当初は
laravel01
というプロジェクト名をアップしたら、実際にファイルはアップされているのですが、teraTarmでは認識されませんでした。プロジェクト名をlaravelapp
とか、数字の入ってないのに変更したらOKだった!DocumentRootにindex.phpを配置 500Error
composerでlaravelを導入すると、vedorディレクトリはcomposerと同じ階層に作成されるのだけれど、laravelを他のディレクトリに移したり、vendorディレクトリを移動させると、エラーになってしまう。初歩的なミスをしてました。
- 投稿日:2019-11-28T13:28:55+09:00
51歳からのプログラミング 備忘 XREA様の無料サーバーにLaravel
Laravelを導入するだけで丸1日潰れた。でも、先輩方がサイトで記録を残してくれているので、こんな僕でもなんとか独学で!参考にするのなら、他のサイトがおすすめ!
参考サイト様
下記様、大変にお世話になりました。ありがとうございます!
tanidaiz.com様
@haessal様
@t_mitarai様はじめに
無料レンタルサーバーは XREA様
方法は、XREAに、
・ teraTarmを使って、ローカルで作成したLaravelをアップロードする方法
XREAのファイルマネージャーでもZIPをあげられるSSH登録と許可
説明 XREA無料版の登録 XREAにログインして無料版を申し込む SSH登録 alue-domain GMO管理画面・コントロールパネル
↓
サーバー/XREA
↓
コントロールパネル/ウェブ
↓
FTP設定で「SSH登録」を選択SSH許可 XREA
↓
サイト設定
↓
ツール/セキュリティ
↓
SSH接続IP許可SSH接続
teraTermの場合なら
teraTerm起動
・ ドメイン(IPアドレス)
・ ユーザー(FTP設定のアカウント)
・ パスフレーズ(FTPのパスワード)
を入力
説明 ドメイン alue-domain GMO
↓
コントロールパネル
↓
アカウント@サーバー/「IPアドレス XXX.XXX.XXX.XXX」のIPアドレスUserとPass XREA
↓
サイト設定
↓
FTP設定」
↓
アカウントとパスワードcomposerの導入
説明はこちら-> composer installation
XREAでは、phpコマンドはCLI版を使うそうです。
導入するlaravelで用いるPHPのversionを確認しましょう。
XREAのPHP、laravelのPHP、コマンドに使うPHP($ php72cli)の各PHP versionは揃えましょう!$ php72cli -r "copy('... $ php72cli -r "if(... $ php72cli composer-setup.php $ php72cli -r "unlink(...の部分をteraTarmなどのターミナルで実行!
composerを起動
$ php72cli composer.phar // ↓ // COMPOSERのかっこいい奴が表示されるLaravelの導入
ローカルで開発したlaravelをXREAにUPロード!
・ laravelファイルをZIPなどで圧縮
・ アップローダーでZipをアップ!
teraTarmならクリックドロップ!
XREAのファイルマネージャーなら、ZIP形式でアップロードを選択!
(これだとアップロード時に解凍してくれる!)
・ 不要なファイル(phpunit)を削除!teraTarm で zip を解凍するのは
$ unzip myProject.zipそしたら次に artisan key:generate します
virtual/UserAccount/laravel/myProject/// myprojectに入って以下を行います $ php72cli artisan key:generatemyProject/publicを、public_html(DocumentRoot)に移動します。
/virtual/UserAccount/public_html -- index.php
|- .htaccess
|- favicon.ico
|- robots.txt
って感じにします。
そしたらindex.phpを変更します。
このままだと、index.php の require ./autoload.php で require されずに 500 エラーになります。index.htmlの変更
/public_html/index.php を以下のように修正
// ↓ require __DIR__.'/../vendor/autoload.php'; require '/virtual/UserAccount/laravel/myProject/vendor/autoload.php'; // ↓ $app = require_once __DIR__.'/../bootstrap/app.php'; $app = require_once '/virtual/UserAccount/laravel/myProject/bootstrap/app.php';これで大丈夫かな?
Error
Whoops, looks like something went wrong
phpのバージョンが違っているので、表示できません、っていうエラー?。
Whoops, looks like something went wrong. (1/1) FatalThrowableError Parse error: syntax error, unexpected '?', expecting variable (T_VARIABLE) in Translator.php line 91XREAで使っているPHPバージョンと、導入したlaravelで使ってるPHPバージョンがあってなかった、ってことでした。
ローカルのlaravel XREAのlaravel XREAのphp teraTermのphp の各レベルは合わせるのが吉かな?
laravel導入時に、phpunit系のエラーが出て中断
php72cli -d register_argc_argv=1 composer.phar create-project --no-dev --prefer-dist laravel/.....--no-devでインストールしないように指定したんだけれど、
Your requirments could not be resolvel to an installable set of packages Problem 1 -phpunit/phpunit ... ...というレッドエラーが出た。
すべてphpunitエラーなので、今回はインストールで--no-devは指定せず、エラー発生後にディレクトリーからphpunitを削除して、再インストールすることにしたよ。削除方法はいろいろあるけれど、今回は、
XARE - サイト設定 - FTP設定 - ファイルマネージャー - laravelホルダ - phpunit 削除
で、他のファイルを確認しながら削除してみました。再インストールね!
$ php72cli -d register_argc_argv=1 composer.phar update
http://www.UserDomain/myProject
無事に
導入したLaravelファイルが見当たらない! No such file or directory
これは迷いました!
調べてたら、転送する時の文字コードが違うのでは(エンコード)?とか出てきましたが、最終的にLaravelプロジェクトの名前がよくなかったよう。当初は
laravel01
というプロジェクト名をアップしたら、実際にファイルはアップされているのですが、teraTarmでは認識されませんでした。プロジェクト名をlaravelapp
とか、数字の入ってないのに変更したらOKだった!DocumentRootにindex.phpを配置 500Error
composerでlaravelを導入すると、vedorディレクトリはcomposerと同じ階層に作成されるのだけれど、laravelを他のディレクトリに移したり、vendorディレクトリを移動させると、エラーになってしまう。初歩的なミスをしてました。
- 投稿日:2019-11-28T12:54:53+09:00
Laravel Livewire を使って動的テーブル表示を簡単に作る JavaScriptを1行も書かずに
Laravel Livewireとは
CALEB PORZIOが作った Laravel用パッケージ
https://github.com/calebporzio/laracasts-livewire-datatable
https://laravel-livewire.com/
動的なテーブル表示を簡単につくれる2019/11/26 に CALEB PORZIOがLaracastsにチュートリアル動画をアップした。
https://laracasts.com/series/guest-spotlight/episodes/3CALEB PORZIO の チュートリアル動画を参考にして Books動的テーブル表示を作ってみました。view blade, Controller, Modelはほぼ彼のチュートリアル動画の内容と同じです。
CALEB PORZIOのgithubのサンプルはMySQLで動かない
CALEB PORZIOはsqliteで 動作確認をしているが .envのDB_CONNECTIONをmysqlに変更すると動かない。原因はapp/Http/Livewire/ContactsTable.phpがorder by ``のようなSQLを発行してしまうからで13行目にある public \$sortField; を public \$sortField = 'id';などに変更するとMySQLでも動作するようになる。
Laravel project
Table
tablesとauthorsテーブルを用意してseederでbooksを500レコード authorsを3レコード作成。適当なfactoryも作る。 php artisan migrate; php artisan db:seed でデータを用意。
class CreateBooksTable extends Migration { public function up() { Schema::create('books', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('title'); // ←追加 $table->unsignedInteger('author_id'); // ←追加 $table->timestamps(); }); } }class CreateAuthorsTable extends Migration { public function up() { Schema::create('authors', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); // ←追加 $table->timestamps(); }); } }class BooksTableSeeder extends Seeder { public function run() { factory(\App\Book::class, 500)->create(); // ←追加 } }class AuthorsTableSeeder extends Seeder { public function run() { factory(\App\Author::class, 3)->create(); // ←追加 } }LivewireでBooks一覧画面を作る
Livewireのインストール
コンポーザーでインストール
composer require livewire/livewiremake:livewireでbladeとClassを作る
php artisan make:livewire books-table以下のファイルが作られる
CLASS: app/Http/Livewire/BooksTable.php
VIEW: resources/views/livewire/books-table.blade.phproutes/web.php
一行だけ追加
Route::get('books', 'BooksController');app/Author.php
booksテーブルとのリレーションだけ追加。
class Author extends Model { protected $guarded = []; public function books() { return $this->hasMany(Book::class); } }app/Book.php
Authorテーブルへのリレーションを追加。
検索メソッドを追加。(CALEB PORZIOのContacts.phpを参考にしました。ほぼ同じです。)class Book extends Model { protected $guarded = []; public static function search(string $query) { $res = empty($query) ? static::query() : static::where('title', 'like', '%' . $query . '%'); return $res; } public function author() { return $this->belongsTo(Author::class); } }app/Http/Controllers/BooksController.php
public function __invoke(Request $request) { $books = \App\Book::paginate(); // ←この処理使われていない. $booksはBooksTable.phpで取得するから return view('books', ['books' => $books]); }app/Http/Livewire/BooksTable.php
CALEB PORZIOのapp/Http/Livewire/ContactsTable.phpとほぼ同じです。booksテーブル用に少しだけ変更しました。
class BooksTable extends Component { use withPagination; public $perPage = 10; public $search = ''; public $sortField = 'id'; public $sortAsc = true; public function clear() { $this->search = ''; } public function sortBy($field) { if ($this->sortField === $field) { $this->sortAsc = !$this->sortAsc; } else { $this->sortAsc = true; } $this->sortField = $field; } public function render() { $books = \App\Book::search($this->search) ->orderBy($this->sortField, $this->sortAsc ? 'asc' : 'desc') ->paginate($this->perPage); return view('livewire.books-table', ['books' => $books]); } }resources/views/books.blade.php
@livewireAssetsを追加して
@livewire('books-table) でbooks-table.blade.phpを読み込みます。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Books</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.css"> @livewireAssets </head> <body style="padding:8px;"> <h1>Books</h1> <div class="container pt-4"> @livewire('books-table') </div> </body> </html>/resources/views/livewire/books-table.blade.php
テーブル表示のviewを書きます
wire:model、wire:click.preventの設定があるところが app/Http/Livewire/BooksTable.php と連携するところです。
の値はBooksTable.phpの$searchと同期します。
- Books用に変更してありますが、CALEB PORZIOの resources/views/livewire/contacts-table.blade.php とほぼ同じです。 CALEB PORZIOのチュートリアル動画を参照してください。
<div> <div class="row mb-4"> <div class="col form-inline"> Per Page: <select wire:model="perPage" class="form-control"> <option>10</option> <option>15</option> <option>25</option> </select> </div> <div class="col"> <input wire:model="search" class="form-control" type="text" placeholder="Search books..."> </div> </div> <div class="row"> <table class="table"> <thead> <tr> <th>ID</th> <th> <a wire:click.prevent="sortBy('title')" role="button" href="#"> Title </a> </th> <th> <a wire:click.prevent="sortBy('author_id')" role="button" href="#"> Author </a> </th> </tr> </thead> <tbody> @foreach ($books as $book) <tr> <td>{{ $book->id }}</td> <td>{{ $book->title }}</td> <td>{{ $book->author['name'] }}</td> </tr> @endforeach </tbody> </table> </div> <div class="row"> <div class="col"> {{ $books->links() }} </div> <div class="col text-right text-muted"> Showing {{ $books->firstItem() }} to {{ $books->lastItem() }} out of {{ $books->total() }} results </div> </div> </div>動作確認
php artisan serveブラウザで実際に動かしてみる。
すごい!動く!JavaScriptを1行も書かずに!CALEB PORZIOすごい!
CALEB PORZIOのチュートリアル動画
https://laracasts.com/series/guest-spotlight/episodes/3
- 投稿日:2019-11-28T10:28:33+09:00
Laravel 6.6 LTS セットアップ
1:インストール
% composer create-project --prefer-dist laravel/laravel spider2:簡易サーバー起動、動作チェック
% cd spider % php artisan serve3:SQLite 設定
.env編集DB_CONNECTION=sqlite #DB_DATABASE=laravelデータベース作成% touch database/database.sqliteマイグレーション% php artisan migrate4:Laravel 初期設定
/config/app.php'timezone' => 'Asia/Tokyo', 'locale' => 'ja',5:git管理する。
% git init
- 投稿日:2019-11-28T06:54:10+09:00
Laravel マイグレーションファイル作成
マイグレーションとは
「統合する」などの意味。Laravelにおいては、データベースの定義に当たる。
マイグレーションの手順
1.サーバーの停止
$ control + c
内蔵サーバーを停止して、プロジェクトのディレクトリ内にいることを確認。
2.artisanコマンドでマイグレーションファイル作成
$ php artisan make:migration ファイル名 --create=テーブル名任意のファイル名、テーブル名を入力してターミナルでartisanコマンドを実行する。
プロジェクトのディレクトリ内の「database」→「migrations」ディレクトリ内に「2019_11_24_224426_ファイル名.phpが自動で作成される。
3.データベースの接続
$ php artisan migrate
1.config→database.phpを開く
2.データベース名を変更
'default' => env('DB_CONNECTION', '使用したいデータベース名'), (※データベース名 → mysqlやsqlite等)// 使用するデータベースのパスや.envについての情報を確認しておく 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ],3.cd databaseでディレクトリに移動
4.touch database.sqlite
(database.phpの'connections内にあるdatabase_pathのファイルを作成)5. 「.env」ファイルのDB_CONNECTION=データベース名を使用するデータベース名に変更
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=DB_CONNECTION=sqliteのように使用するデータベース名に変更。
※sqliteの場合は、その下の5行は不要なので削除(あるとマイグレーションエラーになる。)
6.$ php artisan migrateを実行
PDOException::("SQLSTATE[HY000] [1049] Unknown database 'laravel'")
※データベースの定義後、データベースを置くところを作成せずにmigrateを実行するとエラーになる。
- 投稿日:2019-11-28T05:23:56+09:00
Laravel composerインストール後〜内蔵サーバー起動
composer インストール後
Laravelをcomposerを使用してインストール
$ php composer.phar create-project --prefer-dist laravel/laravel プロジェクト名(ディレクトリ)ディレクトリに移動
$ cd プロジェクト名(ディレクトリ)Laravelのサーバーを起動
$ php artisan serve Laravel development server started on http://localhost:8000/※仮想マシン(vagrant)から使用する場合は、
php artisan serve --host 192.168.33.10 --port 8000
ディレクトリの一番上の階層でサーバーを立ち上げること。
(Laravelに内蔵されているサーバーが起動する)