インストールの概要
Composerを利用してインストールしなければならないようだ。前提条件
手順

$ cd ~/git/crud_base_laravel8
$ exec winpty bash
$ php -r "readfile('https://getcomposer.org/installer');" | php
$ php composer.phar create-project "laravel/laravel=8.*" dev
cmd /c mklink /D C:\xampp\htdocs\crud_base_laravel8 C:\Users\user\git\crud_base_laravel8

DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=crud_base_laravel8 DB_USERNAME=root DB_PASSWORD=
$ cd dev
$ composer require laravel/ui参考:ログイン画面を作成(Laravel7版)
php artisan ui vue --auth
$ php artisan session:table
$ php artisan migrate
$ php artisan migrate:status成功例


$ php artisan ui bootstrap
$ php artisan ui vue他のJSライブラリについて
npm install
npm update
npm run dev

手順(さくらサーバーで検証)
$ ssh -l hoge hoge.sakura.ne.jp
cd www/ mkdir temp cd temp
% php -r "readfile('https://getcomposer.org/installer');" | php
% php composer.phar create-project "laravel/laravel=8.*" dev
% cd dev
% php -r "readfile('https://getcomposer.org/installer');" | php
% php composer.phar require laravel/ui
| 説明 | laravel7 | laravel8 |
|---|---|---|
| web.php: ルートの書き方が変わった。 | Route::get('neko', 'NekoController@index'); | Route::get('neko', 'App\Http\Controllers\NekoController@index'); |
$table->timestampTz('created')->nullable();
$table->timestampTz('modified')->nullable();
class Tanuki extends Model
{
const CREATED_AT = 'created';
const UPDATED_AT = 'modified';
}
別の方法
テーブルにcreated_atとupdated_atが存在しないならdatetime型で新規追加する方法もある。SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.updated_at' in 'field list' (SQL: update `users` set `role` = oparator, `users`.`updated_at` = 2021-11-25 09:14:28 where `id` = 218)
LoginController.php
ルート\app\Http\Controllers\Auth\LoginController.php
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function username()
{
return 'name';
}
protected function attemptLogin($request)
{
$username = $request->input($this->username());
$password = $request->input('password');
if (filter_var($username, FILTER_VALIDATE_EMAIL)) {
//if (filter_var($username, ¥FILTER_VALIDATE_EMAIL)) { // Laravel8だと¥マークを付加しないとエラーになる場合がある。
$credentials = ['email' => $username, 'password' => $password];
} else {
$credentials = [$this->username() => $username, 'password' => $password];
}
return $this->guard()->attempt($credentials, $request->filled('remember'));
}
}
ルート\resources\views\auth\login.blade.php
以下の部分だけ、emailとなっている箇所をnameに置換するだけ。
<div class="form-group row">
<label for="name" class="col-md-4 col-form-label text-md-right">ユーザー名 / メールアドレス</label>
<div class="col-md-6">
<input id="name" type="name" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
修正前:login.blade.php
参考までにlogin.blade.phpの修正前はこうなっている。
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
さくらコントロールパネル
メール設定関連画面
ルート\.env
MAIL_MAILER=smtp MAIL_HOST=アカウント.sakura.ne.jp MAIL_PORT=587 MAIL_USERNAME=アカウント@アカウント.sakura.ne.jp MAIL_PASSWORD=メールのパスワード MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=アカウント@アカウント.sakura.ne.jp MAIL_FROM_NAME="サンプルシステム"
手順
php artisan make:command TestBatchコマンド実行後、 「ルート/app/Console/Commands/TestBatch.php」が作成される。
編集例
<?php
namespace App¥Console¥Commands;
use Illuminate¥Console¥Command;
use Illuminate¥Support¥Facades¥DB; // DBを扱えるようにする
use App¥Models¥Neko;
class TestBatch extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'batch:test';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Execute the console command.
*/
public function handle()
{
echo 'バッチ処理を開始します。';
$model = new Neko();
$ent = $model->find(77);
dump($ent);//■■■□□□■■■□□□)
echo 'バッチ処理を終了しました。';
}
}
php artisan batch:test
cd /home/ユーザー名/www/example/;php artisan batch:patient_reset※さくらレンタルサーバーの場合
HTML
<button type="button" class="btn btn-primary" onclick="corsTest();">CORSテスト</button> <div id="err" class="text-danger"></div> <div id="res" class="text-success"></div>
JavaScript
function corsTest(){
console.log('CORSテスト');
let sendData={neko_name:'cat&dog%',same:{hojiro:'ホオジロザメ',shumoku:'シュモクザメ'}};
let fd = new FormData();
let send_json = JSON.stringify(sendData);//データをJSON文字列にする。
fd.append( "key1", send_json );
fd.append('_method','get'); // Laravelでは_methodも送信しないとエラーになってしまう。
let ajax_url = "https://amaraimusi.sakura.ne.jp/crud_base_laravel8/dev/public/web_api/cors_test";
//let ajax_url = "http://localhost/crud_base_laravel8/dev/public/web_api/cors_test";
// AJAX
jQuery.ajax({
type: "post",
url: ajax_url,
data: fd,
cache: false,
dataType: "text",
processData: false,
contentType : false,
})
.done((res_json, type) => {
let res;
try{
res =jQuery.parseJSON(res_json);//パース
}catch(e){
jQuery("#err").append(res_json);
return;
}
console.log(res);
$('#res').html(res.success);
})
.fail((jqXHR, statusText, errorThrown) => {
let errElm = jQuery('#err');
errElm.append('アクセスエラー');
errElm.append(jqXHR.responseText);
alert(statusText);
});
}
PHP コントローラクラス
<?php
namespace App¥Http¥Controllers;
use App¥Http¥Controllers¥AppController;
use Illuminate¥Http¥Request;
use App¥Models¥WebApi;
use Illuminate¥Support¥Facades¥DB;
class WebApiController extends AppController
{
/**
* APIテスト
*/
public function cors_test(){
$param_json = $_POST['key1'];
$param = json_decode($param_json,true);//JSON文字を配列に戻す
$param['success'] = 'success';
$json = json_encode($param, JSON_HEX_TAG | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_HEX_APOS);
return $json;
}
}
routes/web.php
Route::get('web_api/cors_test', 'App¥Http¥Controllers¥WebApiController@cors_test');
config/cors.php
CORSにするための需要な設定。'paths' => ['web_api/cors_test' ,'api/*', 'sanctum/csrf-cookie'], 'allowed_methods' => ['*'], 'allowed_origins' => ['*'], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 0, 'supports_credentials' => false,
パスワードをハッシュ化する
$pw = 'abcd1234';
$hash = \Hash::make('abcd1234'); // パスワードをハッシュ化する。
$hashの値をusersテーブルのpasswordフィールドにDB保存すること。パスワードがハッシュと一致するかの確認
\Hash::check(パスワード, ハッシュ)
if (\Hash::check('abcd1234', '$2y$10$deYZpmp9luNvKpxt2KN8KOED09XNPmJy4beLrJkyqyOYpS9A9Q2U.')) {
echo 'YES';
}else{
echo 'No';
}
url()->current(); // 現在のURLを取得する。ただし、クエリは含まない。
$full_url = url()->full(); // クエリを含めた現在のURLを取得する
$root_url = url()->to('/'); // ルートURLを取得する。ドメイン名とスキームの部分を含む。
$rootPath = request()->getPathInfo(); // ドメイン名とスキームの部分を含まないルートURLを取得する
旧
Laravelにおけるcssファイルやjsファイル読込用の基本URL(ルートパス)を取得する方法
Laravelの場合、下記のindex.phpが起点になっている。このファイルに基本URL取得処理を記述すると良い。 /プロジェクト名/dev/public/index.php$base_url = rtrim(dirname($_SERVER["SCRIPT_NAME"]), '/'); // → /プロジェクト名/dev/public
補足情報
下記はほぼ同じなのだが、PHP_SELFはWEBクエリ部分(?以降)にXSSの脆弱性があるとのこと。なのでSCRIPT_NAMEを利用する。$pdo = \DB::connection()->getPdo();