- 投稿日:2020-05-15T22:10:09+09:00
MacでのLaravel6の環境構築でエラーが起こった件
Laravelのインストールコマンドでエラーが起こった
Composerの準備をこちらの記事の手順で完了した後、
下記のLaravelのインストールをコマンドを実行。$ composer global require laravel/installerすると、下記のエラーが発生しました。
Your requirements could not be resolved to an installable set of packages. Problem 1 - laravel/installer v3.0.0 requires ext-zip * -> it is missing from your system. Install or enable PHP's zip extension. - laravel/installer v3.0.1 requires ext-zip * -> it is missing from your system. Install or enable PHP's zip extension. - Root composer.json requires laravel/installer ^3.0 -> satisfiable by laravel/installer[v3.0.1, v3.0.0]. You are using a snapshot build of Composer 2, which may be the cause of the problem. Run `composer self-update --stable` and then try again. In case it solves the problem, please report an issue mentioning Composer 2. Installation failed, deleting ./composer.json.原因
エラー文から「ext-zip」というものが足りていないということがわかった。
試行錯誤して調べるうちに、HomebrewでPHPがインストールできていない可能性が浮上した。試したこと
そこで、下記のコマンドでHomebrewでのPHP7.4のインストールを実行。
$ brew install php@7.4このコマンド完了は5分程かかりました。
その後、再度下記のLaravelのインストールをコマンドを実行。$ composer global require laravel/installerすると、以下のようにうまくインストールできました。
この前後の環境構築に関してはこちらの記事をにまとめてあるので是非参考にしてください。
- 投稿日:2020-05-15T22:08:45+09:00
MacでのLaravel6の環境構築の手順
目的
- 学習の記録のため。
- 環境構築で少し苦戦したため。
環境構築の手順
- PHPのパッケージ管理プログラム「Composer」のインストール
- Laravelをインストールする(ここで少し苦戦した)
- プロジェクトを作成する
PHPのパッケージ管理プログラム「Composer」のインストール
Laraveではプログラミングをダウンロードしてインストールするのではなく
PHPのパッケージ管理プログラム「Composer」というものを利用する。以下のリンクからcomposerのファイルを直接ダウンロードして配置する。
https://getcomposer.org/download/Latest Snapshot をクリックすると
「ダウンロード」フォルダに「composer.phar」というファイルがダウンロードされる。次にターミナルを起動。
ダウンロードフォルダに移動し/user/local/binに配置する。$ cd ~/Downloads $ sudo mv composer.phar /usr/local/bin/composerパスワードを求められるので入力する。
composer.pharが/usr/local/bin/内にcomposerという名前で移動するコマンド。
これでいつでもcomposerが呼び出し可能になる。最後にcomposerのパーミション(アクセス権)を設定する。
$ chmod a+x /usr/local/bin/composerこれで、composerが実行できるようになり、composerの準備は完了。
$ composer -V Composer version 2.0-dev上記のようになっていれば正常にインストールできている。
Laravelをインストールする
ターミナルを起動し以下を実行する。
$ composer global require laravel/installerうまくいけばこれでLaravelがインストールされる。
下記エラーが出た場合はこちらの記事を参考にしてください。
環境変数PATHの設定
環境変数PATHにインストールの場所を追記しないとLaravelのコマンドが使えない。
そこで、以下のコマンドを実行。$ echo "export PATH=~/.composer/vendor/bin:$PATH" >> ~/.bash_profile $ source ~/.bash_profileすると、Laravelがコマンドとして認識されるようになる。
プロジェクトを作成する
アプリを作成するディレクトリに移動し以下のコマンドを実行する。
$ laravel new プロジェクト名その後、以下のように作成したプロジェクトに移動しサーバーを起動するコマンドを実行。
$ cd プロジェクト名/ $ php artisan serve Laravel development server started: http://127.0.0.1:8000ここまで完了して、
http://localhost:8000/
にアクセスすると以下のようにLaravelのトップページが表示される。
- 投稿日:2020-05-15T20:13:46+09:00
コードから読み解くautoloadの仕組み ~第一層 大雑把にautoloaderの仕組みを理解しよう~
初めに
皆さんcomposerから利用できる
autoload
はご存じでしょうか?PHPのFWであるLaravelなどを使用される方の多くは使用されたことがあるかと思います。自分がautoload
と出会ったのはLaravelを触れたあたりで、初めて見たときは、
「いちいちrequire
しなくてもほかのファイルの機能が使えるのは便利だな~。」
と思っていました。そして使っていくうちに、
「自分が勝手に追加したファイルもちゃんと読み込んでくれている!怖っ!!(謎の恐怖)」
と思うようになり、だんだんその恐怖心が強まってきたのである日気が済むまでautoload
の仕組みを調べました。そして調べた内容を自分のうちにとどめておいても仕方ないし、共有することで自分の考えがよりまとまったり、指摘による考えの修正が起こるかもしれないと思ったのでここへ書いてみました。
もしautoload
の仕組みに興味があったり、自分と同じような恐怖感に覚えがあれば見てみてください。この記事の流れ
autoload
の仕組みはこの記事を含めて3回に分けて紹介していこうと思っています。
ちなみにこの表の深さの欄が下に行けば行くほど扱う内容がニッチで複雑なものになっていきます。もしautoload
の仕組みをを軽く知りたいのであれば、一層だけでも十分だと思います。
深さ タイトル 内容 第一層 大雑把にautoloaderの仕組みを理解しよう autoloadで使用するファイルの働きからautoloadの仕組みを理解する 第二層 より深くautoloadの仕組みを理解しよう 第一層で扱ったファイルのコードからautoloadの仕組みを理解する 第三層 autoloadの完全理解を目指せ! 第一層、二層で扱えなかった事柄の補足 ※第二層、三層は後日公開予定(2020/05/15時点)
扱うツールついて
第一~三層で扱うツールは以下の通りです。
ツール バージョン Laravel 7.11.0 Composer 1.10.5 また、今回解説するComposerはLaravelインストール時に自動でインストールされたものであるので、Composerから
autoload
を単体でインストールした場合と異なる点があるかもしれません。第一層 大雑把に
autoload
の仕組みを理解しよう※タイトル詐欺のようで申し訳ないのですが、この記事ではファイル内のコードの説明をあまりしません。コードの説明は第二層で説明するので、第二層が公開されるまでしばしお待ちください。
aoutload
の構造
autoload
のファイル構造は以下のようになっています。//
以降はファイルごとの役割を表しています。autoload▾ vendor/ ※読み込むファイルのデータを格納 ▾ composer/ autoload_classmap.php //※ autoload_files.php //※ autoload_namespaces.php //※ autoload_psr4.php //※ autoload_real.php //autoloadの実行 autoload_static.php //※ ClassLoader.php //autoloadの実態 installed.json LICENSE autoload.php //autoloadの入り口ファイルごとの役割
次は役割ごとにファイルを分けて、ファイルの中で何が行われているか見てみます。あと実際のコードも載せておきます。
autoload
の入り口
autoload
の入り口はautoload.php
が担います。詳しく説明すると、phpの実行が行われる同時にautoload
の実行を行うautoload_real.php
のある関数へ処理を行うよう命令し、その結果を返します。コードを見るとこんな感じautoload.php// autoload.php @generated by Composer require_once __DIR__ . '/composer/autoload_real.php'; //autoload_real.phpのgetLoader()へautoloadの処理を実行するように命令し、結果を返す return ComposerAutoloaderInit35d447dc237e2326be89407c57b5ca8b::getLoader();ちなみにLaravelで
autoload.php
はこんなところに書かれています。/public/index.php//ここへ読み込むことで、Laravelの処理のすべてでautloadが使用できるようになる require __DIR__.'/../vendor/autoload.php';
autoload
の実行
autoload.php
で処理を命令されたgetLoader()
は大きく分けて3つのことを行います。
1. 読み込むファイルのデータが格納されたファイル(autoload_static.phpなど)に、autoload
の実態があるファイル(ClassLoader.php)へデータを渡すよう命令。
2.autoload
を実行させる
3. その他必要なファイル(これらがどう必要かあまりわかっていません)を読み込み
実際のコードはこちらautoload_real.phppublic static function getLoader() { if (null !== self::$loader) { return self::$loader; } spl_autoload_register(array('ComposerAutoloaderInit35d447dc237e2326be89407c57b5ca8b', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); spl_autoload_unregister(array('ComposerAutoloaderInit35d447dc237e2326be89407c57b5ca8b', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; //1. 読み込むファイルのデータが格納されたファイル(autoload_static.phpなど)に、`autoload`の実態があるファイル(ClassLoader.php)へデータを渡すよう命令 call_user_func(\Composer\Autoload\ComposerStaticInit35d447dc237e2326be89407c57b5ca8b::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { $loader->set($namespace, $path); } $map = require __DIR__ . '/autoload_psr4.php'; foreach ($map as $namespace => $path) { $loader->setPsr4($namespace, $path); } $classMap = require __DIR__ . '/autoload_classmap.php'; if ($classMap) { $loader->addClassMap($classMap); } } //2. `autoload`を実行させる $loader->register(true); if ($useStaticLoader) { $includeFiles = Composer\Autoload\ComposerStaticInit35d447dc237e2326be89407c57b5ca8b::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } //3. その他必要なファイル(これらがどう必要かあまりわかっていません)を読み込み foreach ($includeFiles as $fileIdentifier => $file) { composerRequire35d447dc237e2326be89407c57b5ca8b($fileIdentifier, $file); } return $loader; } }読み込むファイルのデータを格納
この役割を担うファイルは複数ありますが、開発環境によって使用するファイルが異なるので一度にすべてのファイルが実行されるわけではありません。また、ファイルごとに格納されたデータを紹介すると、
autoload_classmap.php
⇒ Laravelで使用するファイルの名前空間+クラス名をキー、そのファイルの絶対パスを値とした連想配列が格納されている。autoload_files.php
⇒ Laravelを使用するうえで重要であろうファイル(自分はよくわかっていない)の配列が格納されているautoload_namespaces.php
⇒ Laravelで使用するファイルの名前空間をキー、そのファイルの絶対パスを値とした連想配列が格納されている。autoload_psr4.php
⇒ Laravelで使用するファイルの名前空間をキー、そのファイルの絶対パスを値とした連想配列が格納されている。autoload_static.php
⇒autoload_classmap.php
+autoload_files.php
+autoload_namespaces.php
+autoload_psr4.php
のデータが格納されている。現在のPHPのバージョンの関係上、autoload
ではこれらの4つのファイルの代わりにこのファイルが実行される。読み込むファイルのデータのされ方と、どのようにしてそのデータを
autoload
の実態であるClassLoader.php
へ送っているのかを確認するために、autoload_static.php
のコードを見てみましょう。autoload_static.php//名前空間+クラス名をキー、絶対パスを値とした連想配列でデータを格納 public static $classMap = array ( 'App\\Console\\Kernel' => __DIR__ . '/../..' . '/app/Console/Kernel.php', 'App\\Eloquent\\Contribute' => __DIR__ . '/../..' . '/app/Eloquent/Contribute.php', 'App\\Exceptions\\Handler' => __DIR__ . '/../..' . '/app/Exceptions/Handler.php', 'App\\Http\\Controllers\\Contribute' => __DIR__ . '/../..' . '/app/Http/Controllers/Controller.php', 'App\\Http\\Kernel' => __DIR__ . '/../..' . '/app/Http/Kernel.php', 'App\\Http\\Middleware\\Authenticate' => __DIR__ . '/../..' . '/app/Http/Middleware/Authenticate.php', 'App\\Http\\Middleware\\CheckForMaintenanceMode' => __DIR__ . '/../..' . '/app/Http/Middleware/CheckForMaintenanceMode.php', 'App\\Http\\Middleware\\EncryptCookies' => __DIR__ . '/../..' . '/app/Http/Middleware/EncryptCookies.php', 'App\\Http\\Middleware\\RedirectIfAuthenticated' => __DIR__ . '/../..' . '/app/Http/Middleware/RedirectIfAuthenticated.php', 'App\\Http\\Middleware\\TrimStrings' => __DIR__ . '/../..' . '/app/Http/Middleware/TrimStrings.php', 'App\\Http\\Middleware\\TrustProxies' => __DIR__ . '/../..' . '/app/Http/Middleware/TrustProxies.php', 'App\\Http\\Middleware\\VerifyCsrfToken' => __DIR__ . '/../..' . '/app/Http/Middleware/VerifyCsrfToken.php', 'App\\Model\\Contribute\\Input' => __DIR__ . '/../..' . '/app/Model/Contribute/Input.php', 'App\\Providers\\AppServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AppServiceProvider.php', 'App\\Providers\\AuthServiceProvider' => __DIR__ . '/../..' . '/app/Providers/AuthServiceProvider.php', 'App\\Providers\\BroadcastServiceProvider' => __DIR__ . '/../..' . '/app/Providers/BroadcastServiceProvider.php', 'App\\Providers\\EventServiceProvider' => __DIR__ . '/../..' . '/app/Providers/EventServiceProvider.php', 'App\\Providers\\RouteServiceProvider' => __DIR__ . '/../..' . '/app/Providers/RouteServiceProvider.php', 'App\\TestModel' => __DIR__ . '/../..' . '/app/TestModel.php', 'App\\User' => __DIR__ . '/../..' . '/app/User.php', //省略 //ClassLoader.phpへデータを送信 public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInit35d447dc237e2326be89407c57b5ca8b::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInit35d447dc237e2326be89407c57b5ca8b::$prefixDirsPsr4; $loader->prefixesPsr0 = ComposerStaticInit35d447dc237e2326be89407c57b5ca8b::$prefixesPsr0; $loader->classMap = ComposerStaticInit35d447dc237e2326be89407c57b5ca8b::$classMap; }, null, ClassLoader::class); }
autoload
の実態
ClassLoader.php
はautoloa
の実態ということもあって、やることは送られてきたデータをただ読み込むだけです。コードはこちらClassLoader.php//ファイルを読み込む関数の呼び出し public function register($prepend = false) { spl_autoload_register(array($this, 'loadClass'), true, $prepend); } //データの読み込みとデータに基づくファイルの読み込み public function loadClass($class) { if ($file = $this->findFile($class)) { includeFile($file); //ここはただ include $file してるだけ。 return true; } } //送られてきたデータを取得 public function findFile($class) { // class map lookup if (isset($this->classMap[$class])) { return $this->classMap[$class]; } if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { return false; } if (null !== $this->apcuPrefix) { $file = apcu_fetch($this->apcuPrefix.$class, $hit); if ($hit) { return $file; } } $file = $this->findFileWithExtension($class, '.php'); // Search for Hack files if we are running on HHVM if (false === $file && defined('HHVM_VERSION')) { $file = $this->findFileWithExtension($class, '.hh'); } if (null !== $this->apcuPrefix) { apcu_add($this->apcuPrefix.$class, $file); } if (false === $file) { // Remember that this class does not exist. $this->missingClasses[$class] = true; } return $file; }終わりに
今回の記事は以上となります。
autoload
のファイルに書かれたコードはPHPのマジックメソッドを使って作られているので、解読は自力でもやりやすかったです。(それでも構造の理解は結構大変だった...)
この関数はどう使われているのか疑問に思った方は、後日公開される第二層の記事を楽しみにしてください。こちらほうは今回あっさりとしか紹介しなかった関数などについてじっくり紹介していきます。あとLaravelに関しての記事もいくつか書いているので、こちらも読んでいただけるとありがたいです!!
Laravelのサービスコンテナのバインドと解決の仕組みが知りたい!
Laravelのsingletonメソッドの機能とその仕組みについて
- 投稿日:2020-05-15T19:02:18+09:00
[PHP] Composer のユーザーコマンドを対話式で実行したい(Scripts, TTY and Interactive Shell)
composer
のscripts
設定で、composer dev
と打ったら PHP の Docker コンテナを起動して触りたい。
しかし、Interactive shell
と表示され終了してしまう。Docker に限らず、他の対話式のシェル・スクリプトでも同じ。「composer ユーザーコマンド 対話式 実行 tty interactive shell」でググってもドンピシャの Qiita 記事が出てこなかったので、自分のググラビリティとして。
TL; DR
[コマンド] < /dev/tty
でtty
をコマンドとつなげる。
その際、Composer\\Config::disableProcessTimeout
も設定しないと、composer
の制限で 300 秒で接続が切れてしまう。TS; DR
以下は
composer test
で PHPUnit を使ってユニット・テストの実行、composer compile
で Box3 を使って./bin
ディレクトリ設置用の Phar アーカイブの作成、そしてcomposer dev
で Docker の PHP7 コンテナを起動して対話式(bash
シェル)で触れるようにしている例です。composer.json{ ... "scripts" :{ "test": [ "./vendor/bin/phpunit --configuration=./config/phpunit.xml" ], "compile": [ "./vendor/bin/box compile --config=./config/box.json" ], "dev": [ "Composer\\Config::disableProcessTimeout", "docker run --rm --entrypoint='/bin/bash' --workdir='/app' -v $(pwd):/app php:7-cli < /dev/tty" ] } }参考文献
- Writing Composer Scripts by Greg Anderson @ pantheon.io
- Interactive PHP script with composer @ StackOverflow
- 拡張/プラグイン/ユーザーコマンド/カスタム | 逆引き!Composer コマンド・ライン一覧 @ Qiita
- 投稿日:2020-05-15T18:16:30+09:00
Laravelで多言語処理を行う
前提条件
eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っていますメッセージファイル作成
(1) /sample/resources/lang/en/messages.phpを作成
en/messages.php<?php return [ 'sample' => 'sample message' ];(2) /sample/resources/lang/jaフォルダを作成
(3) /sample/resources/lang/ja/messages.phpを作成ja/messages.php<?php return [ 'sample' => 'サンプルメッセージ' ];Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpに下記を追記
use Illuminate\Support\Facades\App;
(2) /sample/app/Http/Controllers/SampleController.phpにmultiLangメソッドを追記
public function multiLang(Request $request) { if ($request->query('lang') === 'ja') { App::setLocale('ja'); } else { App::setLocale('en'); } $data = [ 'msg' => __('messages.sample'), ]; return view('sample.multiLang', $data); }App::setLocaleメソッドを使うことによってresources/langフォルダ内のどのフォルダを使うか設定することができます
App::setLocaleメソッドを呼ばなかった場合、config/app.php内のlocaleが使われます
__('messages.sample')でmessages.php内のsample要素の値を取得できます(3) /sample/routes/web.phpに下記を追記
Route::get('sample/multi-lang', 'SampleController@multiLang');
viewの作成
/sample/resources/views/sample/multiLang.blade.phpファイル作成
multiLang.blade.php<html> <head> <title>sample</title> </head> <body> <div>{{ $msg }}</div> <div>@lang('messages.sample')</div> </body> </html>bladeでは
@lang
('messages.sample')でmessages.php内のsample要素の値を取得できます
{{ __('messages.welcome') }}と書いても取得できます動作確認
http://localhost/laravelSample/sample/multi-lang
sample message sample message
http://localhost/laravelSample/sample/multi-lang?lang=ja
サンプルメッセージ サンプルメッセージ
- 投稿日:2020-05-15T17:14:56+09:00
【Laravel】artisanコマンドで作成するファイルと手動で作成していいファイルのまとめ
はじめに
初Qiitaです。皆さん、Laravel使ってますか?
Webアプリを開発する時に、不慣れだとどのファイルがコマンドで作成すべきで、
どのファイルが手動で作っても大丈夫というのを確認しつつ進めたりして、
手間取ってしまいませんか?Laravel初心者の私がちょうどそんな状態で、
こういう切り口で説明してくれるページがあるといいなぁ、と思い。
探したんですが見つからなかったので、今回は自分でまとめてみたいと思います。artisanコマンドで作るファイル
- マイグレーションファイル (2020_05_XX_XXXXXX_create_hoge_table.php)
- コントローラーファイル (HogeController.php)
マイグレーションファイル
DBにテーブルを追加(モデルを追加)する時に作成します。
hogeがモデル名です。
php artisan make:model hoge --migration/database/migrations/内にマイグレーションファイルができるので編集します。
終わったらマイグレーションを実行します。php artisan migrationこれでDBにテーブルが追加されます。
ちなみに、使うモデルはコントローラー内で呼び出してから使うと幸せになれます。(必須ではないですが)
use App\Hoge;コントローラーファイル
このファイルにアクション(メソッド)を追加していきます。
HogeControllerがコントローラー名です。php artisan make:controller HogeController/Http/Controllers/内にコントローラーファイルができるので編集します。
artisanコマンドは不要なファイル
こちらはコマンド操作がいらない、最初からある or 手動で作成してもよいファイルです。
- ルーティングファイル(/routes/web.php)
- ビューファイル(index.blade.php)
ルーティングの追加
インストール時から存在している /routes/web.php に追記していきましょう。
ビューファイル
htmlを記載するためのファイルですね。
/resources/views/内に好きに作ってOKです。
階層も深くできるので、機能ごとにディレクトリにまとめるのがよいでしょう。ちなみに私はSmartyの名残でテンプレートファイルと読んでいますが、ビューファイルと呼ぶ方が今どきっぽいですね。
おまけ 個人的によく使うartisanコマンド
サーバーの起動。
php artisan serveそして、コマンドラインでDBの内容確認できて便利なtinker。
php artisan tinkerおわりに
以上です。
ここちゃうやんけ!的なツッコミ大歓迎です。
- 投稿日:2020-05-15T16:51:30+09:00
『HTTP ERROR 500』が出た時の対処法(さくらインターネット)
WordPressをインストールしようとした時に・・・
こいつで時間を浪費したので僕が試した解決策をご紹介します。やること
さくらのサーバーにアクセスして、PHP設定の編集→php.ini設定ファイルの編集に「error_reporting 8191」と入力だけ。
(めんどくさいと思ってもやらないとかいけつできない)そして再度アクセスすると・・・
エラー文が表示されているのでそれに対処するだけ!ちなみに僕は
PHP Parse error: syntax error, unexpected 'DB_HOST' (T_STRING), expecting ")' in /home/xxxxxxxxx/xxxxxxxxx/wp-config.php on line 38でした。
調べてみると・・・「'」(シングルクォーテーション)の入れ忘れ。笑
是非試してみてください。
- 投稿日:2020-05-15T16:24:53+09:00
Laravelでプロジェクトの作成フロー
新規プロジェクト
ターミナル# バージョン指定なし (最新版をインストール, 初期値でmysqlを利用する) $ composer create-project --prefer-dist laravel/laravel プロジェクト名 # バージョン指定あり (初期値でmysqlを利用する) $ composer create-project --prefer-dist "laravel/laravel=5.5.*" sampleproject #書き方はいろいろ $ composer create-project laravel/laravel sampleproject --prefer-dist "6.0.*"初期設定
タイムゾーンを日本に変更
タイムゾーンの変更
config/app.php'timezone' => 'UTC', #UTCをAsia/Tokyoに変更 'timezone' => 'Asia/Tokyo',言語を日本に変更
config/app.php'locale' => 'en', #enをjaに変更 'locale' => 'ja',DBの文字設定
config/database.php'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', #mb4を消す(顔文字を不要) 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci',デバックバーのインストール
ターミナル$ composer require barryvdh/laravel-debugbar画面上に非表示にするために、.envファイルを変更する
.envAPP_DEBUG=true #falseに変更する APP_DEBUG=falseこれでも画面に残っている場合は、キャッシュを消す
ターミナル$php artisan cache:clear $php artisan config:clearDBの設定変更
.envファイルの下記のDB設定における、DATABASE名、USERNAM名、PWを設定していく
.envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=laravel DB_PASSWORD=MAMPでDBの作成
MAMPでUSERを作成
作成した情報を記述する
.envDB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_task DB_USERNAME=laravel_user DB_PASSWORD=password接続できるか確認
ターミナル$php artisan migrate成功した場合は、無事にDBに接続できている。
MAMPのDBをSeaquel Proで確認する場合
ユーザー名:root
パスワード:root
データベース:
ソケット:/Applications/MAMP/tmp/mysql/mysql.sock
これで接続すれば、確認ができる
Laravel-ui認証
laravel/uiパッケージをインストール$composer require laravel/ui:^1.0 --devフロントエンドのスカフォールドをインストール// 基本的なスカフォールドを生成 php artisan ui bootstrap php artisan ui vue php artisan ui react // ログイン/ユーザー登録スカフォールドを生成 php artisan ui bootstrap --auth php artisan ui vue --auth php artisan ui react --auth依存パッケージのインストール$ npm install && npm run devエラーメッセージを日本語化
下記リンクを開く
https://github.com/minoryorg/laravel-resources-lang-jaダウンロードしたフォルダを開くと、jaというフォルダが存在する
resources/langフォルダに、ダウンロードしたjaフォルダを追加
これで日本語されています
passwordなど英語表記のものを日本語にするには、validation.php'attributes' => [], //最下部のattributesにパスワードの項目を追加する 'attributes' => [ 'password'=>'パスワード' ],ターミナルで開いておきたい
ターミナル(タブ1)$ npm run development -- --watchターミナル(タブ2):ローカルサーバー$ php artisan serveターミナル(タブ3):コマンド実行用$ 何かターミナルコマンド入力する際に利用するMVCの操作
ここからMVCコントローラーの操作を進めていく
ルーティング
web.php#型 Route::get('url', 'コントローラー@アクション'); #例 Route::get('tests/test', 'TestController@index'); #リソースを利用して、記述短縮 Route::resource('photos', 'PhotoController');マニュアル:
https://readouble.com/laravel/6.x/ja/controllers.htmlTestController@indexでコントローラーを紐づけている。
routingの一覧を確認//ターミナルで確認 $ php artisan route:list //ファイルで確認 $ php artisan route:list > route.textコントローラー
コントローラーとモデルの作成
ターミナル#モデル単体を作成 $php artisan make:model Models/Test # モデル、マイグレーションファイル、コントローラーを同時に作成 $ php artisan make:model Models/Test -mc #コントローラーの作成(基本的なアクション含む) php artisan make:controller PhotoController --resourceModels/Test Modelsフォルダの中で、Test.phpを作成
-mcはマイグレーションファイルとコントローラーを同時に作成するオプションマイグレーションファイルの作成
ターミナル$php artisan make:migration create_tests_tableマイグレーションの記述
マニュアル
https://readouble.com/laravel/6.x/ja/migrations.html
マニュアルを参考に、カラム型、制限をかけて、カラム修飾子で詳細に設定するマイグレーションを実行
マイグレーションを実行$ php artisan migrateマイグレーションの履歴を確認$php artisan migrate:statusマイグレーションをロールバックする$php artisan migrate:rollback --step:5コントローラーの作成
ターミナル$ php artisan make:controller TestControllerコントローラーの記述
TestController.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Test; #モデルとコントローラーを紐づける class TestController extends Controller { // public function index() #railsの場合はdef indexだが、 laravelの場合はpublic function index() { $values = Test::all(); #モデルを介して、DBから情報を取得 dd($values); #railsのbinding.pryのように取得した内容を確認できる。 return view('tests.index', compact('values')); #ここでどのviewなのか指定して紐づける #つまり、最後にどのviewにどの値を持っていくか指定する。 } }View
ログインしているか、していないで表示切り替え
マニュアル
https://readouble.com/laravel/6.x/ja/blade.html認証によって表示切り替え@auth // ユーザーは認証済み @else // @endauth @guest // ユーザーは認証されていない @endguestaタグにrouteのリンクを埋め込む
routeのnameを記述することで、リンク先のURLを簡単に指定できる
<a href={{ route(contacts.index) }}
- 投稿日:2020-05-15T15:17:20+09:00
LaravelでDatabaseTransactionsを利用してDBにアクセスするテストを高速に実行する。
概要
タイトルでほぼ終わってる感がありますが、
DatabaseTransactions
トレイトを利用すると、DBへの書き込みテストを高速に行うことができます。説明
DBに対するテストをする場合に
RefreshDatabase
を利用する例をよく見ますが、
RefreshDatabaseは内部的にphp artisan migrate:fresh
が行われており、データベースの作り直しから始まるので、Migrationが増えてくるとかなり時間が掛かるようになってきます。
DatabaseTransactions
を利用するとテストのsetup時点でbeginTransactionして、tearDown時にrollbackしてくれるので、データベースを作り直すことが無く、高速に実行できます。デメリットは?
データベースを作り直すわけではないので、完全に実行前に戻るわけではありません。
例えばautoIncrementなidを持つtableなどに対してテストを行った場合は、たとえrollbackしても自動採番の数字は戻りません。そこら辺を理解した上で利用できる状況であれば、とても高速です。
- 投稿日:2020-05-15T10:27:54+09:00
PHP - Lighttpdでのファイルのアップロードサイズ変更
はじめに
PHPはPHPでもphp-cgiを使用した時のメモ
Apache向けが多いのでLighttpd向けに
組み込みLinuxで軽量・簡単にWEBアプリケーションを作る人の選択肢が多いと思われます。
スタンドアロンな製品に簡易操作メニューを作りたい場合とか調べた時の一生忘れていけない覚書
※ 次の製品を作るころには忘れてる、ので書いておく
・lighttpdでは.htaccessは使えない
・lighttpd.confではphp.iniで設定する内容を記述できない
環境・条件
事前にLighttpdでPHP(php-cgi)が動いていること
(phpコマンドが入っていなくてもよい)
- WEBサーバー
- lighttpdを使用
- PHP version
- ver 5.6
php.iniを修正
php.iniは5.6デフォルトから必要なパラメータだけを修正しました。
デフォルトのphp.ini(5.4~5.6、7.0~7.3まであります)
ここのページの下あたりにあります。
https://webhost.ai/download-default-php-ini-files/
たくさんあるので、ローカルに保存しておけば、いつの日か役に立つかもデフォルト128Mから256Mに変更
ファイルサイズが大きいと時間がかかるのでタイムアウト時間を変更以下のパラメターで変更可能
php.inimemory_limit = 256M post_max_size = 256M upload_max_filesize = 256M default_socket_timeout = 180ただし変更する場合は以下の条件を満たすこと
イコールでもOKmemory_limit >= post_max_size >= upload_max_filesize
修正した個所の解説
php.ini; L411 (default 128M ; メモリ使用量の上限 単位をつけること memory_limit = 256M L679 (default 128M ; POSTデータの最大サイズ 単位をつけること post_max_size = 256M L811(default 128M ; 1ファイルあたりの最大アップロードサイズ 単位をつけること upload_max_filesize = 256M L839 (default 60 ; タイムアウト時間の変更 単位は秒、何もつけない ; 大きいデータは時間掛かるのでデフォルト60だと短い場合が発生してしまうことがある default_socket_timeout = 180
- 投稿日:2020-05-15T01:27:23+09:00
MacでのLaravel6の環境構築
目的
- 学習の記録のため。
- 環境構築で少し苦戦したため。
環境構築の手順
- PHPのパッケージ管理プログラム「Composer」のインストール
- Laravelをインストールする
- アプリケーションを作成する
1. PHPのパッケージ管理プログラム「Composer」のインストール
Laraveではプログラミングをダウンロードしてインストールするのではなく
PHPのパッケージ管理プログラム「Composer」というものを利用する。以下のリンクからcomposerのファイルを直接ダウンロードして配置する。
https://getcomposer.org/download/Latest Snapshot をクリックすると
「ダウンロード」フォルダに「composer.phar」というファイルがダウンロードされる。