- 1. LaravelでCSVファイルをエクスポートする
- 2. 管理者のみに新規ユーザー登録を許可する[laravel8.*, laravel/breeze]
- 3. 管理者のみに新規ユーザー登録を許可する[laravel6.*, laravel/ui]
- 4. CodeIgniterでNamespace declaration statement has to be the very first statement or after any declare call in the script のエラー
- 5. 【Laravel】ルーティングで定義していないURLにアクセスしたときに自動的にリダイレクトさせる。
- 6. 【Laravel】SQLインジェクション対策(LIKE句)
- 7. laravel collective 間違いやすい箇所
- 8. 転職活動管理アプリを作ろう⑦(各メニューの作成=完成)
- 9. PHP 順列処理
- 10. FuelPHP – deleted_atの名前を変更した時のモデルの設定
- 11. Dotenv.phpのエラー
- 12. 【Eloquent】条件に当てはまるもの・またはNULLであるものの抽出
- 13. Drupal のバックアップ
- 14. MysqlでNULLのカラムをカウントする方法
- 15. LaravelでCSVからデータをインポートする
- 16. Laravel 6.xで削除機能
- 17. 認可
- 18. 記事のタグをselect multipleで
- 19. WindowsでGitLab+SonarQube連携と時々UnitTest
- 20. 【PHP】高等技術なコントロールブレイク
LaravelでCSVファイルをエクスポートする
### やりたいこと
**Laravelを使って、テーブルから取得したデータをCSVファイルとしてダウンロードする**CSVファイルのエクスポート(アップロード)については別の記事にまとめたのでそちらを参照ください。
https://qiita.com/gohandesuyo/items/18ad77bad0b7e068d6f7ここではテーブルを用意して、テーブルに格納されたレコードを取得する実装例とします。サンプルとなるテーブルの定義は以下の通りとします。
DBはMySQLを前提としています。|カラム|型|PK|not null|unique|
|:–:|:–:|:–:|:–:|:–:|
|id|int|〇|〇|〇|
|login_id|varchar(20)||〇|〇|
|password|varchar(255)||〇||
|name|varchar(255)||〇||
|email|varchar(255)||〇||
|created_at|timestamp||〇||
|updated_at|timestamp||〇||### 実装方法
CSVエクス
管理者のみに新規ユーザー登録を許可する[laravel8.*, laravel/breeze]
社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
**Laravel標準の動作**
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン
↓
**このように修正します。**
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない## version
“`
PHP 8.0.11
laravel/framework 8.65.0
laravel/breeze 1.4.2
“`## guestの新規ユーザー登録をガードする
/routes/auth.php“`
Route::get(‘/register’, [RegisteredUserController::class, ‘create’])
->middleware(‘guest’)
->name(‘register’);Route::post(‘/register’, [RegisteredUser
管理者のみに新規ユーザー登録を許可する[laravel6.*, laravel/ui]
**1年近く前に書いた記事が下書きに眠ったままでした…**
社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
**Laravel標準の動作**
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン
↓
**このように修正します。**
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない## version
“`
laravel/framework 6.18.41
laravel/ui 1.2.0
“`## 管理者のみユーザー登録できるようにする
参考サイト
[Laravel:管理者のみに新規ユーザー登録(register)を許可](https://qol-kk.com/wp2/blog/2019/01/18/post-1045/)
こちらを参考にファイルをいくつか修正しまし。
## ユーザー登録処理後の動作を変更する
ここからが本題です
vendor以下を変更すると後々大変ですので、それを避けつつユーザー登録処理後
CodeIgniterでNamespace declaration statement has to be the very first statement or after any declare call in the script のエラー
# エラー画面
![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1969082/7ff550e7-bab6-2b51-6ab6-8177ee406dc6.png)
“`
Namespace declaration statement has to be the very first statement or after any declare call in the script
“`最初に余計なもんを書き足すなと怒られた。
# 解決策
コメントアウトを上にしてあったのが原因でした…
【Laravel】ルーティングで定義していないURLにアクセスしたときに自動的にリダイレクトさせる。
自分用のメモとして残します。
ルーティングで定義されていないページにアクセスした場合、404エラーを表示するのではなく自動的にリダイレクトさせる方法をメモ。
#やり方
Route::fallbackをルーティングに追記する。“`routes\web.php
【Laravel】SQLインジェクション対策(LIKE句)
# **問題**
派手なSQLインジェクションは一般的なWebフレームワークを使用すれば基本的に発生しません。
しかし、LIKE検索を行う場合はDoS攻撃が成立してしまうことがあります。
`LIKE “%a%b%c%d%e%e%f%g%@%.%”`
上記のようなクエリはSQLエンジンに大きな負荷をかけます。
LIKE句のメタ文字はエスケープする必要がありますが、“`php
$query->where(‘hoge’, ‘LIKE’, ‘%’ . $value . ‘%’);
“`と直に書いてしまうケースは多いと思います。
# **対策**
LaravelでのこのLIKE句のインジェクション対策はおそらく3通りほどあると思うので、
それぞれのソリューションをご紹介していこうと思います。## **1. macroを用意する**
まずBlueprintのmacroを定義するために、
サービスプロバイダを新しく作ります。(AppServiceProvider.phpに書き込む方法もある。“`shell
php artisan make:provider Bluepri
laravel collective 間違いやすい箇所
# なんでもtokenを書くべきじゃない
“`php
Form::open([‘url’ => ‘home’])//↓HTMLではこう書かれていることになる
転職活動管理アプリを作ろう⑦(各メニューの作成=完成)
前回の記事は [コチラ](https://qiita.com/soso555/items/1d355c30c176c2bc396a)
# 概要
– [テーブル定義した内容](https://qiita.com/soso555/items/89acdd45e88d0e0251f1) をもとに各メニューを作るだけだが、それぞれ特殊なことをやったので手順を記す# 各テーブルごとの作成手順
## エージェント
– [以前実施した内容](https://qiita.com/soso555/items/5f69b0e159e1087a17ab#%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E4%BD%9C%E6%88%90) を参照## エージェント担当者
– マイグレーションファイル、モデル、コントローラの作成はエージェントと同じ
– マイグレーションファイル
– 外部キー(エージェント:エージェント担当者=1:多)の設定“`php
Schema::create(‘agent_recruiters’, funct
PHP 順列処理
・目的
順列の理解①他の記事を参考にしたもの。
“`nPr.php
// r$v){
// v を除いた配列
$arr_except_one = array_filter($arr, function($key) use($k) { return $key !== $k; }, ARRAY_FILTER
FuelPHP – deleted_atの名前を変更した時のモデルの設定
論理削除の`deleted_at`から`leaved_at`に変更した場合にモデルを以下のように設定する。
“`php
protected static $_soft_delete = array(
‘deleted_field’ => ‘leaved’, // _atを含めない
‘mysql_timestamp’ => true,
);
“`
Dotenv.phpのエラー
非常にレアケースですが、Dotenv.php でエラーが出る場合があります。
“`
PHP Fatal error:
Uncaught Symfony\Component\Dotenv\Exception\FormatException:
Invalid character in variable name in “/var/www/html/bin/../.env” at line 18.
“`
#原因
.env の書式に問題がある可能性が高いです。“`
変数=値
#コメントアウト
“`
.envの中で許される書式はこの2つだけです。#.envでよくやってしまうミス
“`
// コメントアウト
; コメントアウト
“`
上記のように、コメントアウトの記号を間違ってしまう。
Javascript と同じように `//` でコメントアウトしちゃったり
VSCode の `CMD+/` ショートカットキーを押すと `;` が入る事がある。“`
変数:値
“`
`json` や `yaml` から環境変数のコピペをした時に `:` をそのままにしている場合が
【Eloquent】条件に当てはまるもの・またはNULLであるものの抽出
便利なメソッドが見つからなかったので、単にorWhere条件で抽出する。
“`php
// 例:掲載終了日時が到来していない・もしくは掲載終了日時がNULLの記事を取得する場合
$articles = Article::whereDate(‘display_end_date’, ‘>’, now())->orWhereNull(‘display_end_date’)->get();
“`他にも条件がある場合はA & (B or C)になるようにクロージャを使用する。
“`php
// 例:ID > 1000のうち、掲載終了日時が過ぎている・もしくは掲載終了日時がNULLの記事を取得する場合
$articles = Article::where(‘article_id’, ‘>’, 1000)
->where(function ($query) {
$query->whereDate(‘display_end_date’, ‘>’, now())
Drupal のバックアップ
こちらの続きになります。
https://qiita.com/JQinglong/items/7ce6e09ef06950dcaf79
Backup and Migrate
https://www.drupal.org/project/backup_migrate
を使って、バックアップを取ろうとしましたが、
“`
Cannot connect to the database because the MySQLi extension is missing.
“`というエラーが発生しているので、対応します。
## MySQLi
MySQLi エクステンションを有効にすれば良いのか?
そのためには、php.ini に、記述を追加する必要がありそうです。https://stackoverflow.com/questions/10646655/the-mysqli-extension-is-missing-please-check-your-php-configuration
では、php.ini はどこにあるのか。
drupal では、管理画面から、phpinf
MysqlでNULLのカラムをカウントする方法
#はじめに
outer joinしたテーブルでNULLを含むカラムをカウントした結果をorderByで並び替え用とした時にNULLのレコードがカウントされなかった。
NULLのレコードもカウントする方法を備忘として記録する。#事例
tableA ※nameはユニークとする| id | name |
|:———–|————:|
| 1 | aaa |
| 2 | bbb |tableB
| id | point |
|:———–|————:|
| 1 | 10 |
| 1 | 20 |“`
DB::table(‘tableA’)
->leftjoin(‘tableB’, ‘tableB.id’, ‘=’, ‘tableA.id’)
->orderBy(DB::raw(‘count(point)’)
->groupBy(‘tableA.id’)
->get();
“`Laravel
LaravelでCSVからデータをインポートする
### やりたいこと
**リクエストで送られてきたCSVファイルの内容を取り込んでテーブルにインサートしたい**これがやりたくてLaravel(PHP)でのCSV取り込み処理を色々と調べていたのですが、fgetcsv関数を使ってファイルを1行ずつ読み込みながらループしながら処理していく流れの記事が比較的多かったような印象を受けました。
けどせっかくLaravelを使うならCSVの内容をコレクションに変換して処理していく方が簡単なのでは?
と思ったので、そっちの方法で実装試してみました。
結果、思ったより楽に実装できたので、LaravelでCSV取り込みを実装する必要がある場合に、実装例の1つとして参考にしてみてください。Laravelのコレクションの詳細は[こちら](https://readouble.com/laravel/8.x/ja/collections.html#method-chunk)
※ここではバックエンドの実装例のみ載せます。フロントエンドの技術は何でも良いですが、CSVファイルがpostで送信されてくる想定で話を進めます。
### テーブル定義
ここでは
Laravel 6.xで削除機能
自分用の削除機能の備忘録。
今回は削除画像を押下→「削除しますか?」という確認→OKで削除 の流れを実装します。**view**
“`php:index.blade.php
@foreach($posts as $post){{ $users->username }}
{{ $post->post }}
認可認可について
ポリシーを登録する
AuthServiceProvider.php
→※AppServiceProvider.phpと間違いやすいので注意する“`php
記事のタグをselect multipleで
↓新規投稿画面
“`php
↓記事編集画面
“`php
【PHP】高等技術なコントロールブレイク
“`PHP
‘田中’, ‘国語の点数’ => 777],
[‘name’ => ‘渡部’, ‘国語の点数’ => 62],
[‘name’ => ‘品川’, ‘国語の点数’ => 23],
[‘name’ => ‘品川’, ‘国語の点数’ => 4343],
[‘name’ => ‘滝谷’, ‘国語の点数’ => 93],
[‘name’ => ‘川原田’,’国語の点数’ => 55],
[‘name’ => ‘一色’, ‘国語の点数’ => 27],
[‘name’ => ‘一色’, ‘国語の点数’ => 89],
[‘name’ => ‘高橋’, ‘国語の点数’ => 555],
[‘name’ => ‘高橋’, ‘国語の点数’ => 9999],
];foreach ($res as $val) {
$name = $val[‘name’];
$abc = (int)$val[‘国語の点数’];
i関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた