laravel-admin がモデルを認識しないときの解決法 composer dump-autoload

Laravel-adminで新しくコントローラを作成しようとしていたとき

php artisan admin:make AnalyticsController --model=App\\Models\\Analytycs 

Model does not exists !  となりできなかった

laravel-admin がモデルを認識しないときの解決法

composer dump-autoload

新しいクラスやファイルが正しく認識されるようになる

再度コマンドをしてみる

php artisan admin:make AnalyticsController --model=\App\Models\Analytycs 

無事成功しました!

INFO App\Admin\Controllers\AnalyticsController [C:\xampp\htdocs\ga-analytycs\laravel_ga_chart\app/Admin/Controllers/AnalyticsController.php] created successfully. 
Add the following route to app/Admin/routes.php: $router->resource('analytycs', AnalyticsController::class);

 

Paiza演習問題:カンマ区切りで 10 個出力 2 (paizaランク D 相当)

カンマ区切りで 10 個出力 2 (paizaランク D 相当)

10 個の数値が半角スペース区切りで与えられます。これらの数値をカンマ区切りで出力してください。ただし、末尾にはカンマではなく改行を出力してください。

入力される値
N1 N2 N3 ... N10

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
答えの数値を出力してください。

N1,N2,N3,...,N10

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件
すべてのテストケースにおいて、以下の条件をみたします。

* 入力される数値はすべて 0 以上 1,000 以下

入力例1
0 1 2 3 4 5 6 7 8 9
出力例1
0,1,2,3,4,5,6,7,8,9
入力例2
462 218 867 547 11 630 845 689 891 630
出力例2
462,218,867,547,11,630,845,689,891,630

解答implode(",", $変数名)dを使えばかんたんだよ

<?php
  //半角スペース刻みの入力値を配列に格納
  $ary = explode(" ", fgets(STDIN));
  //カンマを足して出力
  echo implode(",", $ary);
?>

Paizaレベルアップ問題集(占い (paizaランク C 相当))

占い (paizaランク C 相当)

次のような占いプログラムを作成してください。

「ユーザー」と「ユーザーに対応する血液型」、「血液型」と「血液型に対応する占い結果」が与えられます。

それぞれのユーザーに対応する占い結果を表示してください。

入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。

入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。

入力される値
入力は以下のフォーマットで与えられます。

n
(ユーザー_1) (ユーザー_1の血液型)
(ユーザー_2) (ユーザー_2の血液型)
(ユーザー_3) (ユーザー_3の血液型)

(ユーザー_i) (ユーザー_iの血液型)

(ユーザー_n) (ユーザー_nの血液型)
m
(血液型_1) (血液型_1の占い結果)
(血液型_2) (血液型_2の占い結果)
(血液型_3) (血液型_3の占い結果)

(血液型_j) (血液型_jの占い結果)
..
(血液型_m) (血液型_mの占い結果)

入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。

期待する出力
1から n までの各ユーザーについて順に、ユーザーとその占い結果を半角スペース区切りで出力してください。
最後は改行し、余計な文字、空行を含んではいけません。
条件
すべてのテストケースにおいて、以下の条件をみたします。

・1 ≦ n ≦100
・1 ≦ m ≦100
・(ユーザー_i)は、半角英数字からなる1から20文字までの文字列
・(血液型_j)は、半角英数字からなる1から20文字までの文字列
・(血液型_jの占い結果)は、半角英数字からなる1から20文字までの文字列
・(ユーザー_iの血液型)と等しい、(血液型_j)が必ず存在
・i ≠kのとき、(ユーザー_i)と(ユーザー_k)は異なる文字列
・j ≠kのとき、(血液型_j)と(血液型_k)は異なる文字列

入力例1
5
Kyoko B
Rio O
Tsubame AB
KurodaSensei A
NekoSensei A
4
A red
B green
O blue
AB yellow
出力例1
Kyoko green
Rio blue
Tsubame yellow
KurodaSensei red
NekoSensei red
入力例2
5
Kyoko shishiza
Rio futagoza
Tsubame otomeza
KurodaSensei yagiza
NekoSensei mizugameza
5
shishiza the_first_person
yagiza the_second_person
otomeza the_first_cat
mizugameza the_first_dog
futagoza NekoSensei
出力例2
Kyoko the_first_person
Rio NekoSensei
Tsubame the_first_cat
KurodaSensei the_second_person
NekoSensei the_first_dog
入力例3
3
AAA aaa111
BBB bbb222
CCC ccc333
5
aaa111 zzz
bbb222 yyy
ccc333 xxx
ddd444 www
eee555 vvv
出力例3
AAA zzz
BBB yyy
CCC xxx

 

解答(入力例1で解説)

<?php
//入力値(数値)を受け取る
$n = trim(fgets(STDIN));
//空の配列で初期化する
$userToBlood = [];

//マッピング情報を配列$userToBloodに格納します。※1
for ($i = 0; $i < $n; $i++) {
[$user, $blood_type] = explode(' ', trim(fgets(STDIN)));
//$userToBlood[$user]$blood_typeを代入する
$userToBlood[$user] = $blood_type;
}

//入力値(数値)を受け取る
$m = trim(fgets(STDIN));
//空の配列で初期化する
$bloodToFortune = [];

for ($i = 0; $i < $m; $i++) {
[$blood_type, $fortune] = explode(' ', trim(fgets(STDIN)));
//マッピング情報を配列$bloodToFortuneに格納します。※2
$bloodToFortune[$blood] = $fortune;
}

foreach ($userToBlood as $user => $blood) {
//取り出したユーザー名と血液型から、
//血液型に対応する運勢を$bloodToFortune配列から検索し
//ユーザー名と運勢をスペース区切りで表示します。※3
echo $user . ' ' . $bloodToFortune[$blood] . "\n";
}

for文でそれぞれ連想配列を作成しています

※1の部分var_export($userToBlood[$user]);

array (
'Kyoko' => 'B',
'Rio' => 'O',
'Tsubame' => 'AB',
'KurodaSensei' => 'A',
'NekoSensei' => 'A',
)

※2の部分var_export($bloodToFortune[$blood]);

array (
'A' => 'red',
'B' => 'green',
'O' => 'blue',
'AB' => 'yellow',
)

※3の部分
foreachで$userToBloodのキーの部分の名前(kyoko,rio,tubame)と$bloodToFortune[$blood]の運勢(red,green,blue,yellow)を出力しています

Laravelのデバッグの仕方(dd編・log)

app/Http/Controlles/TestControllers.phpに以下の記述をして保存します
<?php
namespaceApp\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Test;
classTestControllerextendsController
{

  publicfunctionindex()
  {
    $values = Test::all();
    dd($values);
    returnview('tests.test');
}
}

サーバーを起動してhttp://127.0.0.1:8000/tests/testにアクセスします

php artisan server

このような表示になっていれば成功しています

ログを見る方法

storage/logs/laravel.logを見る

laravel.logの見方

上から履歴が記録されているので一番下が最新のログです。

今9478まで履歴があり、問題が出ているURLでアクセス(http://127.0.0.1:8000/tests/test)にアクセスすると…

このようにログが表示されます。

9478行目のlocal.ERROR: syntax error, unexpected token "&"
{"view":{"view":"/Applications/MAMP/htdocs/task_test/resources/views/tests/test.blade.php","data":
{"errors":"<pre class=sf-dump id=sf-dump-239852308 data-indent-pad=\" 
\"><span class=sf-dump-note>Illuminate\\Support\\ViewErrorBag</span> 
{<a class=sf-dump-ref>#321</a><samp data-depth=1 class=sf-dump-expanded>
local.ERROR: syntax error, unexpected token "&"

/Applications/MAMP/htdocs/task_test/resources/views/tests/test.blade.php

に予期しない&が含まれていることがわかったので

/Applications/MAMP/htdocs/task_test/resources/views/tests/test.blade.php

のファイルを見ます。

resources/views/tests/test.blade.php

test
@foreach($values as $value)
  {{$value->id}}<br>
  {{&value->text}}<br>
@endforeach

4行目が”$value”ではなく”&value”となっていたので、エラーになっていました。

$valueに変更したところ

から無事表示させることができました!

use Illuminate\Support\Facades\DB;と$tests = DB::table(‘tests’)->get();とする方法

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Test;
use Illuminate\Support\Facades\DB;

class TestController extends Controller
{
//
public function index()
{
  $values = Test::all();
// こちらのほうが必要なデータがわかって良い感じ
  $tests = DB::table('tests')->get();
  dd($tests);
  return view('tests.test',compact('values'));
 }
}

↓のように表示される

他にも↓のようなやり方でもOK
<?php
namespaceApp\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Test;
use Illuminate\Support\Facades\DB;

classTestControllerextendsController
{

publicfunctionindex()
{
  $values = Test::all();
// こちらのほうが必要なデータがわかって良い感じ
  $tests = DB::table('tests')
   ->select('id')
   ->get();
   dd($tests);
   returnview('tests.test',compact('values'));
 }
}

 

“zsh: permission denied: composer”と”sudo: composer: command not found”を解決できた方法(エラー対処録)

“zsh: permission denied: composer”と”sudo: composer: command not found”で少しハマった話

経緯

composerをインストールをして、Laravel環境構築でLaravelをインストールする際にcomposerコマンドをしても上記のエラーで先に進めなかった

解決法(いきなり結論)

“zsh: permission denied: composer”

sudoをつけてコマンドするだけ(パスワード入力する必要アリ)

Before

composer --version
↓エラー文
zsh: permission denied: composer

After

sudo composer install
↓エラー文
sudo: composer: command not found

sudo: composer: command not found

自分の解決策

Macintosh HDに移動してShift+⌘(コマンド)+.(ドット)で隠しファイルを見つける

/usr/local/binまで移動する

usrをクリック

 

localをクリック

binをクリック

↑cdコマンドでもGUIでやってもどっちでもOK

composerという名前のフォルダを削除する

rmコマンドで消すか、マウス操作で右クリックから削除

composerをインストールし直す

sudo curl -sS https://getcomposer.org/installer | php

以下のメッセージが出て

All settings correct for using Composer

Downloading...

Composer (version 2.5.1) successfully installed to: /Users/****/composer.phar

Use it: php composer.phar
sudo mv composer.phar /usr/local/bin/composer
composer --version

↓のような表示になってればOKです!

Composer version 2.5.1 2022-12-22 15:33:54
which composer

↓のような表示になってればOKです!

/usr/local/bin/composer

そもそもの原因はcomposer移動時にフォルダが作成されていてその中にcomposer.pharがあったので、パスが通ってなかったのだと思われます。

phpのエラー表示をしたいときやデバッグ方法

phpinfoを使う方法

phpファイル(ファイル名ini.php)に以下のように記述して保存します。
<?php
ini_set('display_errors', "On");
// $aieuo = 'aiueo';
echo $aiueo;
phpinfo();
?>

ブラウザで確認する(http://127.0.0.1/php_test/ini.php)

上のようにNotice:の表示が出ていたら成功です。

var_dumpを使う方法

phpファイル(var_dump)を作成して以下のように記述して保存します

<?php
ini_set('display_errors', "On");
$aiueo = 'aiueo';
// $kakikukeko = 'kakikukeko';
echo $aiueo;
echo '<br>';
var_dump($aiueo);
exit;
?>

ブラウザで確認して(http://127.0.0.1/php_test/var_dump.php)
以下のように表示されていたらOKです。

aiueo string(5) "aiueo" 

PaizaPHP演習問題2 (行の入力)

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

1 行の入力 (paizaランク D 相当)

文字列 s が 1 行で与えられるので s をそのまま出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s が 1 行で与えられます。

s

入力値最終行の末尾に改行が1つ入ります。

期待する出力
入力された文字列をそのまま出力してください。また、出力の末尾には改行を入れてください。

s
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
paiza
出力例1
paiza
入力例2
Paiza21
出力例2
Paiza21
入力例3
paiza813
出力例3
paiza813

解答

<?php
$input_line = fgets(STDIN);
echo "$input_line";
?>

2 行の入力 (paizaランク D 相当)

文字列 s と t が 2 行で与えられるので、s と t の 2 行をそのまま出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s と t が 2 行で与えられます。

s
t
期待する出力
入力された文字列をそのまま出力してください。また、出力の末尾には改行を入れてください。
s
t
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s, t ともに数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
paiza
gino
出力例1
paiza
gino
入力例2
heisei31
reiwa1
出力例2
heisei31
reiwa1
入力例3
2012021300
2020042218
出力例3
2012021300
2020042218

解答

<?php
while ($input = trim(fgets(STDIN))) {
 $input_array[] = $input;
}
foreach ($input_array as $item) {
 echo $item . "\n";
}
?>

行入力】1,000 行の入力 (paizaランク D 相当)

s_1, s_2, s_3, … s_999, s_1000 の 1,000 個の文字列が与えられます。
文字列を与えられた順番通りに出力してください。

入力される値
以下の形式で標準入力によって与えられます。
文字列 s_1, s_2, s_3, … s_999, s_1000 が 1000 行で与えられます。

s_1
s_2
s_3
...
s_999
s_1000

入力値最終行の末尾に改行が1つ入ります。

期待する出力
文字列を与えられた順番通りに出力してください。また、出力の末尾には改行を入れてください。

s_1
s_2
s_3
...
s_999
s_1000
条件
すべてのテストケースにおいて、以下の条件をみたします。

・s_1 から s_1000 は数字または大文字・小文字のアルファベットからなる長さ 1 以上 10 以下の文字列

入力例1
paiza0
paiza1
paiza2
paiza3
paiza4
paiza5~中略~
paiza994
paiza995
paiza996
paiza997
paiza998
paiza999
出力例1
paiza0
paiza1
paiza2
paiza3
paiza4
paiza5
~中略~
paiza995
paiza996
paiza997
paiza998
paiza999

解答

<?php
while ($input = trim(fgets(STDIN))) {
 $input_array[] = $input;
}
foreach ($input_array as $item) {
 echo $item . "\n";
}
?>

PaizaPHP演習問題1 (行の出力)

※スキルチェック問題ではありません。
規約により公式の解答コードそのままはよろしくないので、
オリジナルのコードにしています。

詳しくはコチラ

なるべくわかりやすい解説を付けました。

 行の出力 (paizaランク D 相当)

1 行で整数 813 を出力してください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。

期待する出力
整数 813 を出力してください。また、出力の末尾には改行を入れてください。

813
条件
なし
解答

<?php
echo "813";
?>

2 行の出力 (paizaランク D 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

整数 8 と 13 をこの順番で出力してください。
また、整数 8 を出力した後と 13 を出力した後に改行をしてください。

入力される値
ありません。

入力値最終行の末尾に改行が1つ入ります。

期待する出力
答えの数値を 2 行で出力してください。また、出力の末尾には改行を入れてください。

8
13

条件

解答

<?php
echo "8\n13";
?>

【改行あり出力】1,000 行の出力 (paizaランク D 相当)

1 以上 1,000 以下の整数を昇順で、すべて改行区切りで出力してください。

入力される値
ありません。
期待する出力
答えの数値を 1,000 行で出力してください。また、出力の末尾には改行を入れてください。
条件
解答
<?php
 for ($i = 1; $i <= 1000; $i++) {
 echo $i . "\n";
}
?>

Permission denyを解決した話(エラー対処録:scpコマンドの失敗)

経緯

プラグインのHighlighting Code Blockのprism.cssとprism.jsをローカルからさくらのVPSにscpコマンドで送ろうとしたら・・・

ユーザー名@IPアドレス: Permission denied (publickey).
lost connection

前提

ポートは22ではなく55555のみ開けています(あくまでも例)

ユーザー名1はMacのユーザー名

ユーザー名2はさくらのVPSで作成したユーザー名

IPアドレスはブログのIPアドレス

やったコマンド

scp -P 55555 -i ~/.ssh/id_rsa /Users/ユーザー名1/Downloads/prism.css ユーザー名2@IPアドレス:/var/www/wordpress/wp-content/themes/twentytwenty

普通に55555ポートに公開鍵認証でログインできているのに送れないのはおかしい・・・

解決できた方法

送り先の権限を変更する(chmod)

さくらのVPSにログイン

scp -P 55555 -i ~/.ssh/id_rsa ユーザー名@IPアドレス

送りたいディレクトリまで移動する

cd /var/www/wordpress/wp-content/themes/

権限を変更する

sudo chmod 707 twentytwenty

scpコマンドで送る

scp -P 55555 -i ~/.ssh/id_rsa /Users/ユーザー名1/Downloads/prism.css ユーザー名2@IPアドレス:/var/www/wordpress/wp-content/themes/twentytwenty

↓のような実行文があればscpコマンドが成功しています。

100% 569KB 3.4MB/s 00:00

※注意
適切な権限に戻すことを忘れないように!