月別アーカイブ: 2023年1月

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";
}
?>