ラベル Laravel の投稿を表示しています。 すべての投稿を表示
ラベル Laravel の投稿を表示しています。 すべての投稿を表示

水曜日, 7月 02, 2025

Laravel サイトのアップグレード

 Laravel のサイトをアップグレードする機会がありましたので、その方法をここで書いておきたいと思います。かなり構成というか書き方が変わってきているので注意が必要です。

1. 新しいLaravelプロジェクトの作成

まずはクリーンなLaravel環境を作成します。

composer create-project laravel/laravel new-site

2. 既存コードの移行

必要なファイルを新しいプロジェクトにコピーします:

  • コントローラapp/Http/Controllers

  • モデルapp/Models

  • ビューresources/views

  • ルーティングroutes/web.php または routes/api.php

  • ミドルウェア、サービス、ジョブなど → 必要に応じて

3. Composerのオートロードを更新

クラスのオートロードを再生成します。

composer dump-autoload

4. 必要なパッケージの再インストール

Spatieの権限管理パッケージを使っている場合なら

composer require spatie/laravel-permission

5. Apacheの設定に注意

重要なのが、Apacheの mod_rewrite モジュールを有効化することです。これはひっかかりました。これを忘れるとルーティングが正しく機能せず、トップページしか表示できません。

LoadModule rewrite_module modules/mod_rewrite.so

6. ルーティングの見直し・更新

Laravelのバージョンアップに伴い、ルーティングの記述方法や構文が変更されていることがあります

  • クロージャベースのルートやコントローラルートにおける名前空間の指定方法

  • Route::controller()Route::middleware() を使用したグルーピング構文

  • Web/APIルートファイルでのミドルウェアやプレフィックスの指定

Laravel 8以降では、RouteServiceProvider が変更されましたので変更が必要な場合があります。web.php の記述はこれで動きます。

use App\Http\Controllers\CaseController;

Route::resource('case', CaseController::class);

火曜日, 8月 22, 2017

Laravel 5.4 のすすめ (データベース篇)

Laravel でデータベースのテーブルを作る作業は ORM まできちんと定式化されています。

まずはテンプレートを使って migration のファイルを自動生成し、テーブルを記述。ファイルはここ database/migrations/* 。

php artisan make:migration create_テーブル名 --create=テーブル名

テーブルの記述はこのような形式です。

$table->string('en');
$table->string('ja');
$table->integer('order_id');        

コマンドを使用してテーブルを作成します。データベース設定ファイルは .env です。

php artisan migrate

あとはモデルを自動生成。これでマッピングが完了。

php artisan make:model テーブル名

 $table 変数でテーブル名を指定できます。

class Office extends Model
{
    protected $table = 'office';
}

専用のページを作りたければ、コントローラーを作ってビューを生成します。個々のレコードのページを作っておくと、編集ができますね。その際は routes/web.php の編集が必要です。

php artisan make:controller コントローラー名 --resource

ロールバックでテーブルを消去したり、シードを使ってデータを放り込むこともできます。

日曜日, 8月 20, 2017

(仕様が変更された)Laravel 5.4 を使う

故あって Laravel で PHP サイトを作ることとなりました。ので概要をメモっておきたいと思います。

これ MVC とか ORM とか DI とか軽く使えるよくできてるシステムなんですが、いまだマイナー系なのかなんなのか仕様がバージョンごとコロコロ変わる。

ついこのあいだ ver. 5.1 で書いて ver. 5.4 で動かそうと思うと… 動きます。ライブラリをそのままコピーしてあるからなんですが、これが新たなプロジェクトをたちあげようとするとライブラリの仕様が変更されている。

新しいライブラリはメソッドなど整理されていて使いやすくなっていますが、仕様が異なるので同じ調子で書いていくとエラーが続出します。

まずは新しいプロジェクトの作り方から。

laravel new プロジェクト名

これでライブラリなどすべてコピーされて完全なシステムが出来上がります。それはいいんですが、ここでまずルーティングのファイルの置き場所が違う。ファイル名まで違う。ver. 5.3 で変更されたようです。

ROUTING:
routes/web.php

ここですね。あとビューとかコントローラーとかは同じです。

VIEW:
resources/views/*.blade.php

CONTROLLER:
app/Http/Controllers/*.php

ルーティングの書き方はこんな感じです。

Route::resource('/dashboard','OrderController');

これですべてページからのリクエストが仕分けされてコントローラーで処理できます。これはいいですね。

動詞 URI アクション ルート名
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy

これどういうことかってページから投げられるリクエストでそれぞれアクションを呼べるわけなんです。DELETE って投げれば destroy ってメソッドを定義するだけできちんと動くサイトが出来てしまうわけです。

こうやってビューでフォームを指定します。DELETE を投げてるわけですね。

<form method="post" action="/dashboard/{{$task->id}}">
{{ csrf_field() }} 
{{ method_field('delete') }} 
<input type='submit' value='Remove' 
class='btn btn-danger btn-sm' />
</form>

で、コントローラーを定義します。

    public function destroy($id)
    {
        $order= Order::findOrFail($id);
        $order->delete();
        return redirect ( '/dashboard' );
    }

これだけでリクエストが仕分けされて処理できるって仕組みです。うまいですね。

Order ってのはデータベースのテーブルがマップされたオブジェクトです。ORM ってのは便利ですね。delete() って呼ぶだけで作業は完了です。

Laravel ってのは頭が整理されるとってもよいフレームワークだと思います。しかしながら仕様変更が激しいので要注意です。

Flask の Blueprint のテンプレート問題

  Flask の Blueprint は、ルート、静的ファイル、テンプレートをまとめて管理できます。しかし、テンプレートが指定できません。 ここでは、Blueprint の template_folder の問題点と回避策を説明します。 Blueprint のテンプレート問題...