インストールの概要
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.phpuse 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を扱えるようにする 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 = 'テスト用バッチ'; // コマンド説明文 /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return int */ public function handle() { // ここに処理を記述する。 echo 'バッチ処理を開始します。'; // DBアクセスの例 $data = ¥DB::select('select * from patients where id= 1'); var_dump($data); echo 'バッチ処理を終了しました。'; return Command::SUCCESS; } }
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();