20211014のPHPに関する記事は7件です。

【フォーム】追加ボタンを押して関連した入力欄2つを同時に増やしていく方法

はじめに 今回以下のようなフォームは作ったので、備忘録として残しておきます。 HTML部分 create.brade.php <label>{{ __('材料') }} <a onclick=add() class="btn btn-sm btn-light">+追加</a> <div id="input_plural"> <div class="d-flex"> <input type="text" class="form-control mb-1" name="ing-name-1"> <input type="text" class="form-control mb-1" name="ing-size-1"> <input type="button" value="削除" onclick="del(this)"> </div> </div> </label> javaScript部分 main.js let inputPlural = document.getElementById('input_plural'); var count = 2; function add() { let div = document.createElement('DIV'); div.classList.add('d-flex'); var input = document.createElement('INPUT'); input.classList.add('form-control'); input.setAttribute('name', 'ing-name-'+count); div.appendChild(input); var input = document.createElement('INPUT'); input.classList.add('form-control'); input.setAttribute('name', 'ing-size-'+count); div.appendChild(input); var input = document.createElement('INPUT'); input.setAttribute('type', 'button'); input.setAttribute('value', '削除'); input.setAttribute('onclick', 'del(this)'); div.appendChild(input); inputPlural.appendChild(div); count++; } function del(o) { o.parentNode.remove(); } おわりに bootstrapを使ってちょっぴり整えているので、その点はご了承ください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel8】マイグレーションで既存のテーブルにカラムとデータを追加する

概要 既に作成済みのテーブルへカラムを追加し、データまで入れる機会があったのでまとめます。 データの投入といえばシーダーが一般的かと思いますが、追加するカラムへどのようなデータが投入されるのかをマイグレーションファイルのみで確認できるため、今回はこの方法を採用しました。 想定 リリース済みのサービスへの改修依頼 並び順カラム(sort_id)を追加し、1,2,3・・・とデータを挿入する 環境 Laravel 8.24.0 マイグレーションファイル <?php use App\Models\Post; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; class Modifyposts20211013 extends Migration { /** * Run the migrations. * * @return void */ public function up() { // sort_idカラムの追加 Schema::table('posts', function (Blueprint $table) { $table->unsignedInteger('sort_id'); }); // カテゴリなしのsort_idを指定 // Postレコードの追加 $postRecord = [ 'name' => '投稿1', 'sort_id' => 0, ]; DB::table('posts')->insert($postRecord); // 既存のカテゴリレコードを取得 $posts = Post::oldest('id')->get(); $counter = 1; // 既存のカテゴリレコードへsort_idの追加 foreach ($posts as $post) { if($post->name === '投稿1') { continue; } $post->sort_id = $counter; $post->save(); $counter++; } } /** * Reverse the migrations. * * @return void */ public function down() { // Postレコードの削除 DB::table('posts')->where('name', '投稿1')->delete(); // sort_idカラムの削除 Schema::table('posts', function (Blueprint $table) { $table->dropColumn('sort_id'); }); } } 解説 use App\Models\Post;について use Illuminate\Support\Facades\DB; $users = DB::table('users')->get(); foreach ($users as $user) { echo $user->name; } 上記はマニュアルの日本語訳サイトにあるものです。DBファサードを使用して既存のレコードを取得することはできるのですが、$userはstdClassオブジェクトのインスタンスとなるため、saveメソッドやupdateメソッドが使用できずエラーが発生します。そのためuse App\Models\Post; を使用し既存レコードをコレクションとして取得してデータを保存しています。 投稿1の追加など、レコードを1件挿入する際はDBファサードを使用して簡単に行うことができます。 down()メソッドについて // Postレコードの削除 DB::table('posts')->where('name', '投稿1')->delete(); downメソッドには追加したレコードの削除も書いておきます。 この記述がないとロールバックした際に追加したレコードが削除されないため注意です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

転職活動管理アプリを作ろう⑥(laravel-admin 役割ごとのメニュー切り替え)

前回の記事は コチラ やりたいこと なんでも見れるし触れる Administrator、一般利用者を想定した users の 2 つのアカウント種別を作成したい これこそ JetStream を使った一般権限を作成 しろとか言わないでください UI イチから作るのめんどくさいので やったこと概略 権限の作成 laravel-admin では URI の部分一致で設定する 役割の作成 laravel-admin ではホワイトリスト方式 アカウントの作成 ログイン後 HOME 画面の作成、リダイレクト設定 各メニューのサイドバー表示設定 1. 権限の作成 転職活動のメインコンテンツ部分を触れる権限を作成する http://localhost/admin/auth/permissions 以下画像のように作成する 2. 役割の作成 一般利用者を想定しているので、以下のような内容を想定 閲覧不可 ダッシュボード 管理者による設定系メニュー 閲覧可能 転職活動メインコンテンツ部分 アカウント設定 (新規作成)ホーム画面 http://localhost/admin/auth/roles 以下画像のように作成する 3. アカウントの作成 http://localhost/admin/auth/users 役割の値を [2.] で作成した users にしておく 4. ログイン後 HOME 画面の作成、リダイレクト設定 $ php artisan make:controller UserHomeController ひとまず HomeController からパクって以下のようにする namespace App\Admin\Controllers; use App\Http\Controllers\Controller; use Encore\Admin\Controllers\Dashboard; use Encore\Admin\Layout\Column; use Encore\Admin\Layout\Content; use Encore\Admin\Layout\Row; class UserHomeController extends Controller { public function index(Content $content) { return $content ->title('User Home') ->description('ここはホーム画面です') ->row( view('admin::dashboard.title') ) ->row(function (Row $row) { $row->column(12, function (Column $column) { $column->append(Dashboard::environment()); }); }); } } Admin/routes.php を以下のように修正 Route::group([ 'prefix' => config('admin.route.prefix'), 'namespace' => config('admin.route.namespace'), 'middleware' => config('admin.route.middleware'), 'as' => config('admin.route.prefix') . '.', ], function (Router $router) { $router->get('/', 'HomeController@index')->name('home'); $router->resource('agents', AgentController::class); // 以下を追記 Route::group(['prefix' => 'jobhunting', 'as' => 'jobhunting.'], function() { Route::get('/home', 'UserHomeController@index')->name('home'); }); }); 作成したページへのメニューを laravel-admin にて以下のように追加 http://localhost/admin/auth/menu 役割によってログイン後のトップ画面を制御するため、Admin/Controllers/AuthController に以下メソッドを追加 /** * Get the post login redirect path. * * @return string */ protected function redirectTo() { if( Admin::user()->isRole('users') ) { // ここで制御 return config('admin.route.prefix') . '/jobhunting/home'; } // 以下は Encore\Admin\Controllers\AuthController の redirectPath() からコピペ return property_exists($this, 'redirectTo') ? $this->redirectTo : config('admin.route.prefix'); } 各役割のアカウントでログインして、動作確認 5. 各メニューのサイドバー表示設定 laravel-admin では、サイドバーのメニューごとに「どの役割に対して表示するか?」を設定できる めんどくさいが、各メニューの編集画面を開いて以下赤四角部分に表示 したい 役割を追加していく おまけ このアプリでは laravel-admin の画面しか稼働しないため、URI の /admin/ 部分を消す .env ファイルに ADMIN_ROUTE_PREFIX= を追記 プレフィックスに何も設定しない意思表示 routes/web.php の Route::get('/', function () {〜 の部分をコメントアウト laravel デフォルトのトップ画面への遷移を削除 所感 laravel-admin ではメニューの制御を UI で出来るためとても楽でした Controller を作ってルーティングまではコーディングが必要 laravel-admin のドキュメンテーションが中文しか見当たらなかったため少し苦労した ついでにドキュメンテーションをかいつまんで読んでみたけど、やりたいことが直感的にできそうでこのライブラリの素晴らしさを認識しました
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

転職活動管理アプリを作ろう⑤(laravel-admin 拡張〜テーブル作成)

前回は コチラ laravel-admin 拡張 Extension をインストール redis-manager redis の中身を閲覧できる simplemde markdown editor config https://github.com/sparksuite/simplemde-markdown-editor#configuration セッション管理を redis に変更 $ composer require predis/predis .env ファイルを以下のように修正 SESSION_DRIVER=redis : REDIS_HOST=redis REDIS_PASSWORD=null REDIS_PORT=6379 REDIS_CLIENT=predis サーバー再起動 発生したエラー Class "Redis" not found REDIS_CLIENT の値が phpredis のままだったため発生。predis に修正して対応した。 redis のまま対応しようとすると、Redis 拡張モジュールをインストールする必要がある?(未確認) 詳細は この方の記事 にあるっぽい テーブル作成 テーブル定義については コチラの記事 を参照 作り方 (例:Agents テーブル) $ php artisan make:migration create_agents_table --create=agents 作成されたマイグレーションファイルにて、定義したテーブルの構成を記載 /** * Run the migrations. * * @return void */ public function up() { Schema::create('agents', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('top_url'); $table->string('login_url'); $table->boolean('active'); $table->timestamps(); }); } $ php artisan migrate $ php artisan make:model Agent モデルを作成 $ php artisan admin:make AgentController --model=App\\Models\\Agent コントローラを作成 grid() を カスタマイズ すると、一覧画面の見せ方を変更できる form() を カスタマイズ すると、新規登録/更新画面の見せ方を変更できる app/Admin/routes.php に以下ルーティングを追記 $router->resource('agents', AgentController::class); http://localhost/admin/agents にアクセスし表示されれば OK メニュー追加 親メニュー admin 内メニューの「Menu」へ移動 以下内容を入力し submit 再ログインするとサイドバーに反映される 子メニュー admin 内メニューの「Menu」へ移動 以下内容を入力し submit 再ログインするとサイドバーに反映される
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

プログラミングスクールの講師を2年間続けて限界が来て辞めた話

はじめに 某プログラミングスクールで二年間講師をしてました。 受講生の方からの評価点は平均より高く、最終的には全インストラクターの中から代表に選ばれる立場にまでなりました。 始めた経緯 もともと、プログラミングスクールをいつか開きたいと思っていたこともあり、業務委託契約で経験が詰めそうなところに応募。 即採用していただき、正社員で働く傍、復業としてプログラミング講師に。 エンジニア歴は当時は5年 得意な言語はPHPのみでした。 コロナ禍で全てが変わった 特定を避ける為に細かな時期は記述しませんが、この復業を始めてから今も尚世界を苦しめているウイルスの流行で事が大きく変貌していきました。 というのも、私が請け負っていたプログラミングスクールでは生徒様が作成したいと言う物をベースにプログラミングを教えるスクールでした。 その中で、コロナ禍前までの生徒様達は明確に、 「ECサイトが作りたい」 「勤怠管理アプリを作りたい」 「ポートフォリオを作って、簡単な案件に挑戦できるようになりたい」 …etc のような明確としたゴールがありました。 私はその手助けをしたり、一緒に悩んだりしながらも最終的に生徒様達がプログラミングをやってよかったと言いながら旅立っていく姿が大好きでした。 違和感を感じ始めた1年前 コロナ禍でリモートワークが進み、働き方に変化が出てきた頃、ありがたい事にエンジニアという職種は一気に市民権を得た気がします。 また、将来性がなくなるような仕事も目に見えて増え、緊急事態宣言などの影響で時間が余ったという人たちが急増しました。 そんな人達を、引き入れようと当時は様々なプログラミングスクールが広告をバンバン打ち出し始めます。 「誰でもできる!」 「好きな時間に働ける!」 「高単価、高時給!」 「業界内〇〇%リモートワーク」 「この先伸びる仕事No.1!!」 はい、詐欺の広告かなんかですね。 上記のクソ広告のせいで、請け負わせて頂く生徒様のプログラミングを学ぶ理由が上記で記述した「明確な目標」から「稼ぐ手段」に変わりました。 昨日までパソコンのパの字も知らなかった人がプログラミングをする為に初めてパソコンを買い、初めて使ってみましたというレベルの方が激増することになりました。 すると、どうでしょうか 「ローマ字ってなんですか?」 「アプリってどうやって入れるんですか?」 「Zoomの使い方がわかりません。」 「インストールってなんですか?」 「携帯でプログラミングできないんですか?」 「持ってるパソコンが200x年のやつなんですけど大丈夫ですか?」 など、とてもじゃないが今からプログラミングをしようとするには思えない人たちが集まってきました。 もちろん稼げると言われる仕事があって、新しいことに挑戦している人を否定するわけではありませんし、たくさん稼ごうと思うのは悪いことではありません。 ただ、プログラミングに至っては地道な努力があってこそ稼げる物であり、何週間か勉強したからといってすぐにできる仕事ではないと感じています。 エンジニアになって一般的に稼げるのはある程度、現場を踏んで知見がついた段階でフリーとして独立した際に単価が上がるという仕組みだと思います。 会社員でバリバリとウン千万と稼いでる人はおそらく数える程しかいないんじゃないでしょうか。 それにプログラミングスクールって凄く割高ですよね。 高いが故に、お金を払えばできるようになるって思われがちなスクールの一つだと思っています。 そうです、コロナ禍になって増えた客層というのは「ジムと契約したらムキムキになれる」と思っている人達なんです。 私が実際に教えれるのは、週に1回1時間のみ ほかの時間は自分で学習をしてもらわないことには何も進められません。 ですが宿題を出しても、ほとんどの方が仕事が忙しいとの理由で進めませんし手もつけてくれません。 ですので、結果として卒業する頃には本当にちょっとだけHTMLとCSSを使ってサイトを作れるだけの人が出来上がります。 私としては「もったいないなぁ」と思い、受講生からすると「こんなにも払ったのにここまでしかできるようにならなかった!」とクレームです。 また、学習を進めてても調べ方が分からないのでエラーが出るたびに「答えを教えてください!」「なんかできません」「答えを教えてくれません」とクレームです。 他にも様々なクレームがありましたが面白すぎて書ききれません。 そして気づいた頃には、講義の日は絶対に体調を崩すようになり、急性ストレス性胃腸炎になりました。 エンジニアってわからないことに対してワクワクしながら調べて、問題を解決するのが一番楽しく私は続けています。 ですが、彼らにとっては稼ぐ手段の一つとしか見ていないことでしょう。 またどこかで、講師として戻る事はあるかもしれませんが、少なくとも今は一旦離れようと思った話でした。 これからプログラミングをやろうかなと思っている人へ まず、プログラミングという仕事に興味を持ってもらってめっちゃ嬉しいです。 自分のやっている仕事をやってみようかなと思ってくれてありがとうございます。 今、世の中の広告では「独学に限界がある」「個別指導してくれる」 など一人で勉強させないような広告がたくさんあります。 それを真に受けずにまず、自分でできるところまで進めてみてください。 少しお金はかかりますが素敵で様々なサービスがあるのでそちらを使ってみてください。 それでも無理なら、プログラミングスクールという手段も検討してみてもらえれば良いかなと思います。 ただ個人的には、プログラミングスクールにウン十万払うぐらいなら、同じ金額の家電製品買った方が多分人生は豊かになりますよ。 いやほんとに。 私が、今も初学者の時にやってよかったなと思う物を開発系のみになりますが、掲載しておきますのでご参考までに。 Udemy 多分、勉強する上で一番最強。 英語が聞けるなら英語圏の講師の動画も見れるので尚更おすすめ。 レベル別に分けておきます。 じっくり学習したい人におすすめ。 ■初学者向け フロントエンド Udemy HTML+CSS バックエンド Udemy PHP+Mysql HTML、CSS(sass)、JavaScript(Jquery)でサイトの見た目を作成してプログラムはPHPで記述するという 従来の一般的な開発方法です。 特に、PHPはまだまだ採用している企業も多く覚えることも少ない為、PHPを通してバックエンドを覚えると、この先他の言語に行った時も理解を助けてくれると思います。 ■慣れてきた人向け フロントエンド Udemy ReactJs バックエンド Udemy AWS 俗に言うサーバーレスフルスタックJS。 ReactJSと呼ばれるJavascriptのライブラリを使用してまるでアプリのようなWebサイトを構築します。 バックエンド側はAmazonが提供するAmazon Web Service通称AWSを使用します。 一年間は無料利用枠が存在しますが、何も考えずに使ってしまうとお金がかかるので注意してください。 多分この先はこの開発方法がメインになるはず。 Progate Progate home 初学者の時に一番助けてもらいました。 つまづきやすい環境構築などを全て投げ捨てて、ブラウザ完結できる最高のサービス。 月1,000円かかりますが、1ヶ月で全部やり切るぐらいのつもりでやればコスパ最強です。 とりあえずやってみたい方や、短期集中したい方におすすめ。 ドットインストール ドットインストール ホーム 1つ3分程度の動画を見て学ぶサービス。 基本無料で、プレミアプランに登録するとたくさん見れるようになる。 無料だけでも結構深いところまで知れることと、1回の動画が短いので学習の区切りがつけやすくてGood。 お金をかけずにとりあえずやってみたいという人にお勧め。 書籍 ■HTML CSS 1冊ですべて身につくHTML & CSSとWebデザイン入門講座 Web制作者のためのSassの教科書 ■JavaScript jQuery最高の教科書 ■PHP PHP7+MariaDB/MySQLマスターブック PHPフレームワークLaravel入門 ■ReactJs 基礎から学ぶ React/React Hooks ■その他参考になった書籍 いちばんよくわかるWebデザインの基本きちんと入門 ノンデザイナーズ・デザインブック リーダブルコード 現場で困らない! ITエンジニアのための英語リーディング ストレングスファインダー さいごに ここまで読んでくださりありがとうございました。 学習する流れや、自分のやりたいことを実現するためのプロセスなどわからないことあればコメント、メールいずれでも結構ですのご連絡下さい。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Push Notification Using OneSignal Rest API with PHP

in this article, we’ll create Push Notification functionality for our app using oneSignal Rest API and Laravel. We’ll add a device and create a push notification using Rest API.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

時代はPHP8だしFizzBuzz書いた

眠れない夜ってFizzBuzzを書きたくなりますよね。いままでさんざんFizzBuzzを書いてきましたが僕はまだ書き足りないです。 今回はきしださんが今年の1月に書いたらしいFizzBuzzをさっき知って「うむ、これこそ2021年のFizzBuzzだ」と思ったので、臆面もなくぱくることにいたししました。 今回のFizzBuzzのコンセプトは以下の通りです。 元コードの魂を受け継ぎ、オブジェクト指向は時代に合ってないのでnewを使わない 元コードの魂は受け継がず、シンプルではなく凝ったことをしており、エレガントではない 元コードの魂は受け継がず、動く また、判定方法は概ねきしださんのコードから拝借していますがループ方法は異っています。 PHPコード このコードに実用的な要素はありません <?php class FizzBuzz { public static function __callStatic(string $n, array $args): void { echo match ($n % 3) { 0 => match ($n % 5) { 0 => self::fizz_buzz($n), default => self::fizz($n), }, default => match ($n % 5) { 0 => self::buzz($n), default => ($p = strval($n - 1) and self::{$p}()) ?: $n, }, }, PHP_EOL; } public static function fizz(int $n): string { // fizzの直後にfizzが来ることはない if ($n % 5 == 0) { return self::buzz($n - 1); } $_ = fn($n): string => $n; self::{$_($n-1)}(); return ucfirst(__FUNCTION__); } public static function buzz(int $n): string { // buzzの直後にbuzzが来ることはない if ($n % 3 == 0) { echo self::fizz($p), PHP_EOL; } $_ = fn($n): string => $n; self::{$_($n-1)}(); return ucfirst(__FUNCTION__); } public static function fizz_buzz(int $n): string { $_ = fn($n): string => $n; // fizzbuzzの直後はnのみ self::{$_($n-1)}(); return implode(array_map('ucfirst', explode('_', __FUNCTION__))); } } FizzBuzz::{'100'}(); 解説 PHPは数字名のメソッド定義はできませんが、数字名のメソッド呼び出しは可能です __callStatic() はメソッドのオーバーロードと呼ばれるマジックメソッドです 再帰を停止させるために、ぱっと見でわかりにくい書き方をしてます ちなみにPHPにTCO(末尾呼び出し最適化)はありません 私からは以上です。この下は旧作FizzBuzzへのリンクです。 いままでのFizzBuzz かなりまじめなFizzBuzz PHP7時代のFizzBuzz まじめじゃないFizzBuzz とにかくFizzBuzz
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む