DomPDFで word-wrap,word-breakが効かなくて困った件。
以下のとおり効かず幅が伸び続ける。

table-layout: fixedで解決。
<table style="table-layout: fixed">
いろいろ散々はまったけど上記で一発解決。

LaravelのAPI別ドメインからaxiosを使ってアクセス
LaravelでAPIを作っていて、外部のHTMLアプリからAjaxしようとするとクロスドメイン制約にかかって少しはまりました。(POST時に事前にOPTIONSで許可を確認とかCookieを有効にしないとCSRFのセッション切れたりetc.)
結論から
※セキュリティー的には許可の類は制限をするなど要検討。
//サーバー側はMiddlewareでヘッダーを追加
public function handle($request, Closure $next)
{
$response = $next($request);
if(APIアクセス判定条件){
$response->header('Access-Control-Allow-Origin',request()->header('Origin'));
$response->header('Access-Control-Allow-Credentials', 'true');
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Authorization, X-CSRF-TOKEN');
$response->header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
return $response;
}
//POSTなどの前にOPTIONSでリクエストがあるのでRouterに記述追加(許可のヘッダーはMiddlewareで管理なのでこちらは空のレスポンス作るのみ)
Route::options('{all}', function () {
$response = Response::make('');
return $response;
});
//クライアント側
axios.defaults.withCredentials = true
axios.defaults.headers.common['Content-Type'] = 'application/json';
if (method === 'get') {
promise = axios.get(url, { params: params })
} else if (method === 'post') {
promise = axios.post(url,params,{headers:{'X-CSRF-TOKEN':トークン}});
}
外部ドメインへのAjaxは禁止なのでサーバー側で “Access-Control-Allow-Origin” レスポンスヘッダーを返す。
これはセキュリティー上基本アクセス出来ないのでサーバー側のレスポンスヘッダーに加える必要があります。
$response->header('Access-Control-Allow-Origin',request()->header('Origin'));
クッキーを許可するために ‘Access-Control-Allow-Credentials’ で ’true’を返す。
Cookieを許可するのですが、この値を途中、1(数字)と返してしまいすこしはまった。文字列の’true’でうまくいきました。
$response->header('Access-Control-Allow-Credentials', 'true');
あとはaxios側もCookie送信がOFF ( オプションの withCredentials がfalse)になっているので設定します。
axios.defaults.withCredentials = true
リクエストで許可するヘッダーを ‘Access-Control-Allow-Headers’ で指定
基本的なものと、LaravelのCSRFのチェックに利用する ’X-CSRD-TOKEN’を加えます。
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept, Authorization, X-CSRF-TOKEN');
許可するメソッドを ‘Access-Control-Allow-Methods’ で指定
許可するメソッドを指定します。(APIでGETのみならGETだけなどセキュリティー的云々)
$response->header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
POSTの前にOPTIONSのリクエストが来る。
最初わからず混乱してたのですが、クロスドメインへPOSTする前にOPTIONSメソッドでpre-flightのリクエストを送信します。
- [axios]OPTIONSメソッド送信 →
- ←レスポンスを返す。[server]
- [axios]ヘッダーを確認(各種設定したOrigin,Header,Methodなどなど)
- [axios]各種許可されるならPOST送信
Laravelで簡単にバックアップ
インストール
$ composer require spatie/laravel-backup
config/app.phpのprovidorsに追加
'providers' => [
Spatie\Backup\BackupServiceProvider::class,
artisanコマンドで設定ファイル自動作成
config/backup.phpが自動生成される。(ここは適当に編集)
$ php artisan vendor:publish --provider="SpatieBackupBackupServiceProvider"
バックアップ(DBのみ) –only-dbでDBのみ、警告がおおくでていたので、–disable-notificationsも付けた。
$ php artisan backup:run --only-db --disable-notifications
オプションなどは、
$ php artisan backup --help
//とか
$ php artisan backup:run --help
mysqlで重複行を削除する
CREATE TEMPORARY TABLE tmp AS SELECT DISTINCT * FROM users;
DELETE FROM users;
INSERT INTO users SELECT * FROM tmp;
DROP TABLE tmp;
- DISTINCTで重複をマージしてSELECT > テンポラリ
- 元テーブル削除
- テンポラリ > 元テーブル
- テンポラリ削除
Laravelで現在のGET検索パラーメータ(リクエスト)をViewで引き継ぐ。
すこし探して、何度かさがすので。メモ
検索してその結果セットをCSVダウンロードや印刷などにつなぐ時。
<a href="{{ route('item.index',request()->query->all().['export=1']) }}" target="_blank">EXport</a>
のようにパラメータ引きついでお尻に種べつを付けとくとコードも共有しやすかったです。
Laravel で 関連テーブルの数をサブクエリで数える方法
DB::raw を使う。
$users = User::select([
'users.*',
DB::raw('(SELECT COUNT(id) FROM posts)')
])->get();
他にも色々生のSQLを一部組み込めて便利。
Adobe のCreativeCloudとCS6混同の環境でCS6のPhotoShopが起動できない。
とても困った。。マシン再起動しても無理。
問い合わせのTEL番号もチャットも使えない、探せない。フォーラム24h年中無休とかそんな時間ない。
と最新のPhotoshopを買って対応しようかと申し込みページいくと。あったTEL番号。→問い合わせて。
常駐アプリの CreativeCloud からログアウト、再ログインしてみて下さい。
で解決起動できた。 よくあることなのかなー
Adobe問い合わせTEL番号は、このページの下方にありました。
URL
https://www.adobe.com/jp/creativecloud/plans.html
LaravelでhasManyなテーブルの数をカウント
Joinでまとめて取得
<?php
$users = User::join('posts','posts.user_id','=','users.id')
->groupBy('users.id')
->get(['users.id','users.name',DB::raw('count(posts.id) as posts_cnt')]);
foreach($users as $user){
echo $user->name . '('.$user->posts_cnt.')<br>';
}
モデルのhasManyの定義を利用して取得
//Model
<?php
class User extends Model{
public function posts(){
return $this->hasMany("App\Post", 'user_id','id');
}
.
.
}
//Controller and View
$users = User::get();
foreach($users as $user){
echo $user->name . '('.$user->posts()->count().')<br>';
}
LaravelでUniqの条件を追加する。
テーブルのユニーク制約でなく、ある条件下でユニークなバリデーションの設定方法。
商品ID(サプライヤーごとでユニークを想定)
'name' => 'required',
'supplier_id' => 'required',
'product_id' => [
'alpha_numeric',
'nullable',
Rule::unique('products')->where(function ($query){
$query->where('supplier_id', $supplier_id);
})
],
カスタマイズ性が高く細かいところに手が届く感。
Powered by WordPress & Theme by Anders Norén