- 投稿日:2020-11-25T15:45:20+09:00
Laravel × nginx でログやキャッシュ書き込み時のPermission Deniedを回避
ディレクトリとファイル権限を以下に変更
find ./ -type d -exec chmod 755 {} \; find ./ -type f -exec chmod 644 {} \;所有者をnginxへ変更
chown -R nginx. ${laravelディレクトリ}
- 投稿日:2020-11-25T13:56:19+09:00
Laravel 6.x 非同期通信(Ajax) 【JavaScript】 【jQuery】 【axios】 【Vue.js】 各記述方法 ~事前準備編~
制作環境
Windows 10
Laravel : 6.18.35
Laravel/ui : 1.0
Laravel-mix : 5.0.1
Bootstrap : 4.0.0
axios : 0.19
Vue : 2.5.17
XAMPP
PHP : 7.4.3
Visual Studio Codeはじめに
この記事はプログラミングをはじめたばかりの素人が、できたことをメモするのに利用しています。
内容には誤りがあるかもしれません。関連記事
Laravel 6.x 非同期通信(Ajax) 【JavaScript】 【jQuery】 【axios】 【Vue.js】 各記述方法 ~JavaScript編~
Laravel 6.x 非同期通信(Ajax) 【JavaScript】 【jQuery】 【axios】 【Vue.js】 各記述方法 ~jQuery編~作成するもの
商品の登録ができるだけの簡単なページを作成します。
その際業者コードを入力すると、非同期通信(Ajax)で仕入れ先の名前が自動で入力できるようにします。
ただし商品の登録時に業者コードが入力されていなくても、仕入れ先が手動で入力されていれば問題なく登録できるものとします。非同期通信の記述を学ぶのが主な目的の為、最低限必要だと思う記述しかしていません。
完成イメージ
登録した商品は下に一覧で表示される。
やりたい事は、業者コード(4桁)を入力すると仕入れ先が自動で反映されるようにする。はじめる前に
当方の環境では
Bootstrap
とVue.js
を事前にlaravel/ui
でインストールし、Laravel-mix
で読み込むようにしてあります。
インストールは事前に行っておいて下さい。
CDNを利用される場合は、<script src="{{ mix('js/app.js') }}"></script>
の部分をCDNで置き換えてください。事前準備
非同期通信の処理の前に、必要なデータベースのテーブルやフォームを作成します。
※仕入れ先を新規登録するフォームの作成はしません。
また、事前準備の内容についてはあまり詳しく触れません。データベース
データベースには以下の3つのテーブルを作成します。
items テーブル
商品用のテーブルです。
id name supplier created_at updated_at 1 りんご (株)くだもの 2020-11-06 18:21:21 2020-11-06 18:21:21 2 きゅうり (株)やさい 2020-11-06 18:21:21 2020-11-06 18:21:21 3 牛肉 (株)肉 2020-11-06 18:21:21 2020-11-06 18:21:21 4 サンマ 魚組合 2020-11-06 18:21:21 2020-11-06 18:21:21 5 グレープフルーツ (株)くだもの 2020-11-06 18:21:21 2020-11-06 18:21:21 6 ヒラメ 魚組合 2020-11-06 18:21:21 2020-11-06 18:21:21 7 豚肉 (株)肉 2020-11-06 18:21:21 2020-11-06 18:21:21 8 ラム肉 (株)肉 2020-11-06 18:21:21 2020-11-06 18:21:21 9 白菜 (株)やさい 2020-11-06 18:21:21 2020-11-06 18:21:21 prices テーブル
価格のテーブル
id item_id price created_at updated_at 1 1 180 2020-11-06 18:21:21 2020-11-06 18:21:21 2 2 98 2020-11-06 18:21:21 2020-11-06 18:21:21 3 3 580 2020-11-06 18:21:21 2020-11-06 18:21:21 4 4 240 2020-11-06 18:21:21 2020-11-06 18:21:21 5 5 145 2020-11-06 18:21:21 2020-11-06 18:21:21 6 6 280 2020-11-06 18:21:21 2020-11-06 18:21:21 7 7 480 2020-11-06 18:21:21 2020-11-06 18:21:21 8 8 780 2020-11-06 18:21:21 2020-11-06 18:21:21 9 9 280 2020-11-06 18:21:21 2020-11-06 18:21:21 traders テーブル
仕入れ先業者のテーブルです。
id trader_code trader_name created_at updated_at 1 1001 (株)くだもの 2020-11-06 18:21:21 2020-11-06 18:21:21 2 1002 (株)やさい 2020-11-06 18:21:21 2020-11-06 18:21:21 3 1003 (株)肉 2020-11-06 18:21:21 2020-11-06 18:21:21 4 1004 魚組合 2020-11-06 18:21:21 2020-11-06 18:21:21 itemsとpricesは1対1の関係なので、本来1つにまとめればいいと思いますが、練習の為に1対1のままにしてあります。
マイグレーションファイルの作成
プロジェクトのディレクトリでターミナルを起動し、以下を実行してください。
php artisan make:migration create_items_table続けて、
php artisan make:migration create_prices_table続けて、
php artisan make:migration create_traders_table完了後、
database>migrations
内のxxxx_xx_xxx_xxxxxx_create_items_table.php
を開き、以下のように編集します。create_items_table.phppublic function up() { Schema::create('items', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name')->comment('商品名'); $table->string('supplier')->comment('仕入れ先'); $table->timestamps(); }); }次に同じディレクトリ内の
xxxx_xx_xxx_xxxxxx_create_prices_table.php
を開き、以下のように編集します。create_prices_table.phppublic function up() { Schema::create('prices', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('item_id')->comment('商品ID'); $table->foreign('item_id')->references('id')->on('items')->onDelete('cascade'); $table->unsignedBigInteger('price')->comment('価格'); $table->timestamps(); }); }次に同じディレクトリ内の
xxxx_xx_xxx_xxxxxx_create_traders_table.php
を開き、以下のように編集します。create_traders_table.phppublic function up() { Schema::create('traders', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('trader_code')->unique()->index()->comment('業者コード'); $table->string('trader_name')->comment('業者名'); $table->timestamps(); }); }モデルの作成
ターミナルを起動し、以下を実行してください。
php artisan make:model Models/Item※モデルはModelsフォルダの中に作成するようにしています。
続けて、
php artisan make:model Models/Price続けて、
php artisan make:model Models/Trader完了後、
app>Models
内のItem.php
を開き以下のように編集します。Item.phpuse Illuminate\Database\Eloquent\Relations\HasOne; class Item extends Model { protected $fillable = ['name', 'supplier']; public function price(): HasOne { return $this->hasOne('App\Models\price'); } }次に
Price.php
を開き以下のように編集します。Price.phpuse Illuminate\Database\Eloquent\Relations\BelongsTo; class Price extends Model { protected $fillable = ['price']; public function item(): BelongsTo { return $this->belongsTo('App\Models\item')->withTimestamps(); } }次に
Trader.php
を開き以下のように編集します。Trader.phpclass Trader extends Model { protected $fillable = ['trader_name', 'trader_code']; public function scopeWhereSearch($query, $trader_code) { $query->where('trader_code', int($trader_code)); } }ビューの作成
resources>views
内に新しくindex.blade.php
を作成し、内容を以下のように編集します。index.blade.php<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <meta name="csrf-token" content="{{ csrf_token() }}"> <link rel="stylesheet" href="{{ mix('css/app.css') }}"> <title>テスト</title> </head> <body> <div id="app"> <div class="container"> <h1 class="mt-5 mb-3">商品登録</h1> @if (session('success')) <p class="text-primary">{{ session('success') }}</p> @endif @if (count($errors) > 0) <div> <ul> @foreach ($errors->all() as $error) <li class="text-danger">{{ $error }}</li> @endforeach </ul> </div> @endif <form action="/form" method="post"> @csrf <div> <label>商品名: <input type="text" name="name"></label> </div> <div> <label>価格: <input type="text" name="price"></label> </div> <div> <label>業者コード: <input type="text" id="code"></label> <label>仕入れ先: <input type="text" id="supplier" name="supplier"></label> </div> <button class="btn btn-primary" type="submit">登録</button> </form> <h1 class="mt-5">商品一覧</h1> <table class="table"> <thead class="thead-dark"> <tr> <th scope="col">商品名</th> <th scope="col">価格</th> <th scope="col">仕入れ先</th> </tr> </thead> <tbody> @foreach ($itemTable as $item) <tr> <td>{{ $item->name }}</td> <td>{{ $item->price->price }}</td> <td>{{ $item->supplier }}</td> </tr> @endforeach </tbody> </table> </div> </div> <script src="{{ mix('js/app.js') }}"></script> </body> </html>コントローラの作成
ターミナルで以下を実行してください。
php artisan make:cotroller FormController完了後、app>Http>Controllers内のFormController.phpを開き、以下のように編集します。
FormController.phpuse App\Models\Item; use App\Models\Trader; use App\Http\Requests\TestFormRequest; use DB; class FormController extends Controller { public function index() { $itemTable = Item::with('price')->get(); return view('index', compact('itemTable')); } public function post(TestFormRequest $request) { DB::transaction(function () use ($request) { $form = $request->all(); unset($form['_token']); $itemTable = new Item; $itemTable->fill($form)->save(); $priceData = ['price' => $form['price']]; $itemTable->price()->create($priceData); }); return redirect('/form')->with('success', '★★商品を登録しました★★'); } }フォームリクエストの作成
バリデーションの為にフォームリクエストを作成します。
ターミナルで以下を実行してください。
php artisan make:request TestFormRequest完了後、
app>Http>Requests
内のTestFormRequest.php
を開き、以下のように記述します。TestFormRequest.phpclass TestFormRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required', 'price' => 'required|integer|regex:/^[\d]+$/', 'supplier' => 'required', ]; } public function messages() { return [ 'name.required' => ':attributeは必ず入力してください。', 'price.required' => ':attributeは必ず入力してください。', 'price.integer' => ':attributeは整数を入力してください。', 'price.regex' => ':attributeは整数を入力してください。', 'supplier' => ':attributeは必ず入力してください。', ]; } public function attributes() { return [ 'name' => '商品名', 'price' => '価格', 'supplier' => '仕入れ先', ]; } }ルーティングの作成
routes
内のweb.php
を開き、以下のように記述します。web.phpRoute::get('/form', 'FormController@index')->name('index'); Route::post('/form', 'FormController@post')->name('post');確認
/form
にアクセスし、商品が登録できるかやってみてください。
商品が登録され、下の一覧に表示されればOKです。
まだ仕入れ先の自動入力は実装していないので、仕入れ先は手動で入力してください。
また、仕入れ先を4桁(1001)で直接登録しておいてください。次回につづく・・・
- 投稿日:2020-11-25T13:41:14+09:00
Laravel ローカルアプリからAWS S3に画像をアップロードする
ode# 目次
- Macのローカルで作成したLaravelアプリから画像ファイルをS3にアップロードする方法をまとめる
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2 GHz クアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB
- ソフトウェア環境
項目 情報 備考 PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする Laravel バージョン 6.X commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする 前提条件
- MacのローカルでLaravelのアプリが作成できる状態になっていること。
- コマンド
$ composer
が実行できる状態になっていること。前提情報
- 本記事はMacのローカルで作成されたLaravelアプリからAWSのS3に画像をアップロードする方法をまとめている。
- AWSならS3にバケットを作成する部分から、ローカルならLaravelアプリを作成する部分から説明する。
- 本記事の作業完了したソースは下記にアップしてある。
概要
- S3にてバケットを作成
- アクセスキーの取得
- Laravelアプリ作成
- Laravelアプリ側の設定
- 設定
詳細
- 下記の説明で使用するコマンドはsshでインスタンスに接続して実行する物とする。
- S3にてバケットを作成
- 下記のリンクの手順を実施してS3にバケットを作成する。(testフォルダの作成まで実施する。)
- アクセスキーの取得
- 下記のリンクの手順を実施してアクセスキーとシークレットアクセスキーの取得を行う。
Laravelアプリ作成
任意のディレクトリで下記コマンドを実行してLaravelアプリを作成する。作成するアプリ名は「laravel6_s3」とする。
$ composer create-project "laravel/laravel=6.*" laravel6_s3下記コマンドを実行して作成したLaravelアプリのディレクトリに移動する。
$ cd laravel6_s3Laravelアプリ側の設定
laravel6_s3ディレクトリで下記コマンドを実行して必要なライブラリをインストールする。
$ composer require league/flysystem-aws-s3-v3 ~1.0下記コマンドを実行してLaravelの設定ファイルを開く。
$ vi .env下記の様に設定ファイルを修正する。AWSのアカウント登録時にCSVファイルで得た情報を記載する。※シークレットアクセスキーはCSVファイルでのみ確認する事ができるため紛失した場合は別アカウントをAWSに登録したほうが早いかもしれない。
修正前
/var/www/html/test/.envAWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=修正後
/var/www/html/test/.envAWS_ACCESS_KEY_ID=AWSのアクセスキーを記載する AWS_SECRET_ACCESS_KEY=AWSのシークレットアクセスキーを記載する AWS_DEFAULT_REGION=ap-northeast-1 AWS_BUCKET=先に作成したバケット名修正後の.envファイルの全体を下記に記載する。
/var/www/html/test/.envAPP_NAME=test APP_ENV=local APP_KEY=base64:ZJYPq8Ij/UIWowQG+H4Gwz+zXjs/vEn85Yfv45qQa88= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=test DB_USERNAME=root DB_PASSWORD=************** BROADCAST_DRIVER=log CACHE_DRIVER=file QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID=AWSのアクセスキーを記載する AWS_SECRET_ACCESS_KEY=AWSのシークレットアクセスキーを記載する AWS_DEFAULT_REGION=ap-northeast-1 AWS_BUCKET=先に作成したバケット名 PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"ファイル設置処理の付与
アプリ名ディレクトリで下記コマンドを実行してルーティングファイルを開く。
$ vi routes/web.php開いたルーティングファイルを下記の様に修正する。(そのほかのルーティング情報が下記記載と一致していなくても追記部分だけ追記する。)
アプリ名ディレクトリ/routes/web.php<?php use Illuminate\Support\Facades\Route; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); //下記を追記 //画像ファイルをアップロードするボタンを設置するページへのルーティング Route::get('/upload/image', 'ImageController@input'); //画像ファイルをアップロードする処理のルーティング Route::post('/upload/image', 'ImageController@upload'); //上記までを追記アプリ名ディレクトリで下記コマンドを実行してコントローラファイルを作成する。
$ php artisan make:controller ImageController下記のコントローラファイルが作成される。
アプリ名ディレクトリ/app/Http/Controllers/ImageController.php
アプリ名ディレクトリで下記コマンドを実行してコントローラファイルを開く。
$ vi app/Http/Controllers/ImageController.php開いたコントローラファイルを下記の様に修正する。
アプリ名ディレクトリ/app/Http/Controllers/ImageCotroller.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; //下記を追加する use Illuminate\Support\Facades\Storage; class ImageUploadController extends Controller { //下記を追加 public function input() { return view('images.input'); } public function upload(Request $request) { $this->validate($request, [ 'file' => [ // 必須 'required', // アップロードされたファイルであること 'file', // 画像ファイルであること 'image', // MIMEタイプを指定 'mimes:jpeg,png', ] ]); if ($request->file('file')->isValid([])) { Storage::disk('s3')->putFile('/test', $request->file('file'), 'public'); return redirect('/'); }else{ return redirect('/upload/image'); } } //上記までを追記 }アプリ名ディレクトリで下記コマンドを実行してビューファイルを格納するディレクトリを作成する。
$ mkdir resources/views/imagesアプリ名ディレクトリで下記コマンドを実行してビューファイルを作成する。
$ touch resources/views/images/input.blade.phpアプリ名ディレクトリで下記コマンドを実行して画像をアップロードするビューファイルを開く。
$ vi resources/views/images/input.blade.php開いたビューファイルを下記の様に記載する。
アプリ名ディレクトリ/resources/views/images/input.blade.php@extends('layouts.app') @section('content') <!-- トリガー --> <form action="/upload/image" method="POST" enctype="multipart/form-data"> @csrf <label for="photo">画像ファイル:</label> <input type="file" class="form-control" name="file"> <br> <input type="submit"> </form> @endsection確認
laravel6_s3ディレクトリで下記コマンドを実行してローカルサーバを起動する。
$ php artisan serve下記にアクセスする。
下記のページが表示されることを確認する。
任意の画像ファイルを選択し「送信」ボタンを押下する。(送信ボタン押下後にエラーが403エラーが発生する場合は.envファイルの記載に誤りがあることが多い。その他のエラー原因はこちら→AWS S3 Laravel 画像ファイルアップロード時にエラーが発生する)
S3のバケットのテストファイル直下に下記の様にファイルが格納されていることを確認する。(ファイル名はランダムになる。)
参考文献
- 投稿日:2020-11-25T12:11:41+09:00
【Laravel】指定の文字数以上の時、...としたい場合
はじめに
現在、社内向け質問アプリケーションを制作中です。
日々こつこつと機能を追加したり、改善したりしています。
こちらに開発からデプロイまでについてまとめているので、よろしければ是非見てみてください。
【未経験・独学】Laravelでアプリケーションの開発からAWSを用いたデプロイまで今回は、長い文章に対して指定の文字数を超えた場合は、「...」と表示させたいと思い調べたことをここに記録します。
現状
現状はこのように、コメント文が全部表示されています。そのため、コメント欄の箇所のみバランスが悪くなっている。
そこで、100文字以上は...と表示させてコメント欄のサイズをある程度一定にしたいと思う。
調べてみたところ、ヘルパ関数のStr::limit()
を使用することで解決ができると分かった。Str::limit()とは?
Str::limit()とは、Laravelで用意されているグローバルヘルパ関数の一つである。
こちらの関数を使うことで指定した長さへ文字列を切り詰めることが出来る。使い方としては、第一引数に対象の文字列、第二引数に指定の文字数、第三引数に最長文字数を超えた場合に末尾へ追加する文字列を指定する。
参考:Laravel 7.x ヘルパStr::limit()を使う前は、
{{$reply->body}}
と記載している。
Str::limit()を用いると、このようになる。{{\Illuminate\Support\Str::limit($reply->body, 100, '...')}}このようにStr::limit()を用いることで、コメントの文字数を一定にすることが出来ました。
※注意点としては、指定する数字はマルチバイトを考慮しなければいけないということ。
日本語は、マルチバイト文字(2バイト以上のデータ量で表すもの)なため以下のようになってしまう。Str::limit('確認用', '3', '...') //確...となる参考
・マルチバイト文字 【 多バイト文字 】
・全142種類!Laravelヘルパー関数実例まとめ
今回は、Laravelで指定の文字数以上の時、...としたい場合についてまとめました。
公式ドキュメントを見てみると、他にも沢山のヘルパ関数があったので色々見てみようと思います。
- 投稿日:2020-11-25T12:11:41+09:00
【Laravel】指定の文字数以上を文字列を表示するとき、「...」としたい場合
はじめに
現在、社内向け質問アプリケーションを制作中です。
日々こつこつと機能を追加したり、改善したりしています。
こちらに開発からデプロイまでについてまとめているので、よろしければ是非見てみてください。
【未経験・独学】Laravelでアプリケーションの開発からAWSを用いたデプロイまで今回は、長い文章に対して指定の文字数を超えた場合は、「...」と表示させたいと思い調べたことをここに記録します。
現状
現状はこのように、コメント文が全部表示されています。そのため、コメント欄の箇所のみバランスが悪くなっている。
そこで、100文字以上は...と表示させてコメント欄のサイズをある程度一定にしたいと思う。
調べてみたところ、ヘルパ関数のStr::limit()
を使用することで解決ができると分かった。Str::limit()とは?
Str::limit()とは、Laravelで用意されているグローバルヘルパ関数の一つである。
こちらの関数を使うことで指定した長さへ文字列を切り詰めることが出来る。使い方としては、第一引数に対象の文字列、第二引数に指定の文字数、第三引数に最長文字数を超えた場合に末尾へ追加する文字列を指定する。
参考:Laravel 7.x ヘルパStr::limit()を使う前は、
{{$reply->body}}
と記載している。
Str::limit()を用いると、このようになる。{{\Illuminate\Support\Str::limit($reply->body, 100, '...')}}このようにStr::limit()を用いることで、コメントの文字数を一定にすることが出来ました。
※注意点としては、指定する数字はマルチバイトを考慮しなければいけないということ。
日本語は、マルチバイト文字(2バイト以上のデータ量で表すもの)なため以下のようになってしまう。Str::limit('確認用', '3', '...') //確...となる参考
・マルチバイト文字 【 多バイト文字 】
・全142種類!Laravelヘルパー関数実例まとめ
今回は、Laravelで指定の文字数以上の時、...としたい場合についてまとめました。
公式ドキュメントを見てみると、他にも沢山のヘルパ関数があったので色々見てみようと思います。
- 投稿日:2020-11-25T11:30:10+09:00
Ruby on railsとLalavelどっちが良い?
技術選定の仕方
・自分のやりたい事が実現しやすい
・情報量が多いプログラミングはあくまでも手段でしかなく、プロダクトの価値を最大化させることこそが目的である。またプログラミング言語は、基礎文法は少し変わるぐらいで大した差はない。言語に縛られるよりも、自分が言語に合わせて勉強していくほうが、プロダクトの価値も開発効率も上がる。
Ruby on railsを選びました
①scaffoldが便利
MVCの作成はrouteの設定までいい感じに自動で生成してくれる。②情報量が多い!
ruby自体が日本発の言語ということもあり、qiitaの記事の数をはじめ日本語の説明の記事がlalavelよりも多い。③コミュニティー内に参考にできるソースコードがある
身近にコードについて質問でき参考にできるコードがあるのは、めっちゃ楽。Rails: ある程度の規模まではレールに乗ってサクサク作れるが、アプリケーションが成熟してきて「規約」にはないことをやりたくなってくると、途端に求められる技術力や難易度が跳ね上がる。
Laravel: アプリケーションの雛形はあるものの、どのクラスに何を担わせるかなど、設計については Rails 以上に早い段階で意識する必要がある。その設計さえイケていれば、だいたいのことはしっかり書ける。
Rails 歴5年の僕が Laravel で開発するようになって思ったこと。
https://note.com/kurashicom_tech/n/n32ab25910783結論
僕のような初学者には、railsをおすすめします。railsのレールに乗りながら、まずはMVCの基礎を自分にインプットしていく。その後、lalalvelに挑戦!で良いかなと思う。
どちらの言語も実行コマンドは似ているし、Railsはgem、Laravelはcomposerを使えば各種プラグインも簡単に導入できるので、あまり差はないと感じます。
最後まで読んでいただきありがとうございます。
- 投稿日:2020-11-25T09:56:52+09:00
【Laravel】url生成(idなど使用)したページで、現在のページをリロードする方法
はじめに
フォロー・フォロー解除の機能を実装するときにはまった。
フォローボタンクリック → 同ページをそのままリロード
という動きを実現させたい。
方法が思いつかなくて手間取ったので記事にします。通常のリロード方法
通常のページであればそのままurlを指定してリロードすればOK。
return redirect('/home');ただし、今回リロードしたかったページが以下のようにidを使用したurlだったため、
urlに何をいればば良いかわからなくて困った。
/users/[id]
解決方法
以下のようにurl([url])を使用して変数を入れることで解決した
(そんなに難しいことでもなかった。。)return redirect(url('/users',$request->follow_id));まとめ
ページを普通にリロードする関数などあると思っていたが、どうやらないっぽい。
なんだか同じurlを打ち込んでリダイレクト、というのは力技感があって好きではないので、もしスマートなやり方があったらコメントで教えてください。