- 投稿日:2020-09-19T22:06:02+09:00
Larvel8系でLaravel青本を使うと出てくるエラー
Larvel8系でLaravel青本を進めていると出てくるエラー
PHPフレームワークLaravel入門 第2版 (日本語) 単行本(以下青本)を使う方も多いのではないでしょうか。
この本の出版は2019年12月と少し古いもののLaravel7系でも動作確認できていると著書の最初の方に書いてあります。
しかし!
2020年9月8日に出たばかりのLaravel8系を使うと一点問題が起きます。
9月8日以降にLaravelのプロジェクトを作った方は普通どおり操作すればLaravel8系になるのでその方が対象です。
具体的にはweb.phpを記載する際、これまでRoute::get('hello','HelloController@index')と書いていた所をLaravel8系では
use App\Http\Controllers\HelloController; Route::get('hello', [HelloController::class, 'index']);と書くんです。
大事なのはuse.....もいる所。そしてコントローラー名の記載方法が””の中に書くものから[]内に書くという方法へと変わったことです。青本でいうとp43に初めて影響が出てくるのですが、これを従来の方法で書くと
Target class [HelloController] does not exist.
と怒られてしまいます……
- 投稿日:2020-09-19T12:55:44+09:00
[Laravel sql]DB:selectの中身のSQL文のプレースホルダの使い方メモ
状況
Laravel入門でDBクラスを使った際にプレースホルダの例が乗っていたので使えそうなのでメモ
controller
use Illuminate\Support\Facades\DB; //DBクラスのnamespaceを指定 public function index(Request $request) { if (isset($request->id)) { $param = ['id' => $request->id]; //プレースホルダ用に連想配列を作る $items = DB::select('select + from people where id = :id', $param); } else { $items = DB::select('select * from people'); } return view('hello.index', ['items' => $items]); }selectメソッドの第一引数のsql文の中で:idと置いて置いて
第二引数に連想配列を代入すると:idに一致するキーを連想配列から取得してくれるようだ。
?id=数字のクエリ文字を入れてアクセスすると望みの動きをする。
- 投稿日:2020-09-19T12:07:18+09:00
[laravel]Mysqlとの接続メモ
前提条件
Mysqlはインストール済、dbをcreate済、環境はMacOS
設定
config/database.php
return [ 'default' => env('DB_CONNECTION', 'mysql'), 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', '※接続するデータベース名'), 'username' => env('DB_USERNAME', '※ユーザ名'), 'password' => env('DB_PASSWORD', '※パスワード'), ], ].env
DB_USERNAME=※ユーザ名 DB_PASSWORD=※パスワード接続確認
$ php artisan serve正しく接続してなければエラーが返ってくる。
所感
.envはdatabase.phpを上書きするようだ。本番環境に置く時に.envでパラメータ上書きして使うのかな?
- 投稿日:2020-09-19T01:30:18+09:00
Laravel NovaのCardやActionで自作クラスを作らずにインスタンス化する
Laravel NovaのCardやAction, Filter、Partitionですが、基本的には自作クラスを作る必要があります。
カードの作成例$ php artisan nova:card acme/analyticshttps://nova.laravel.com/docs/3.0/customization/cards.html
AnalyticsCar.php<?php namespace Acme\Analytics; use Laravel\Nova\Card; class Analytics extends Card { /** * The width of the card (1/3, 1/2, or full). * * @var string */ public $width = '1/3'; /** * Indicates that the analytics should show current visitors. * * @return $this */ public function currentVisitors() { return $this->withMeta(['currentVisitors' => true]); } /** * Get the component name for the card. * * @return string */ public function component() { return 'analytics'; } }こうして作ったクラスをリソースに登録します。
Analitcs.php(リソース)... public function cards(Request $request) { return [new Analytics]; } ...作成 -> 登録が面倒な場合には無名クラスを使うと便利です。
Analitcs.php(リソース)public function cards(Request $request) { return [ (new class extends Card { public $width = '1/3'; public function currentVisitors() { return $this->withMeta(['currentVisitors' => true]); } ), ]; }こうすることでクラスを作らなくともいきなりカードの登録ができます。
インスタンスからメソッドの呼び出しも可能です。
Analitcs.php(リソース)public function cards(Request $request) { return [ (new class extends Card { public $width = '1/3'; public function currentVisitors() { return $this->withMeta(['currentVisitors' => true]); } )->currentVisitors(), ]; }複数のリソースをまたがったりする場合にはクラスを作ったほうが良いですが、ちょっとカードを使いたいときは無名クラスが便利です。