LaravelとRecurlyを使用してサイトを作成します。 パート1

支払いの計画と処理は簡単ですが、定期的な支払いを受け取るのはそれほど簡単ではありません。 すぐに問題が発生する可能性があります。 拒否の処理方法を決定し、支払いデータを常に最新にして、サイト上のデータを最新に保つ必要があります。 そして、おそらく最も重要な質問は、ユーザーにサイトの支払い情報を最新の状態に保つことです。

幸いなことに、 Recurlyは定期的な支払いの処理に関連するほとんどのタスクを実行するサービスです。 JavaScriptライブラリを使用すると、すべての重要な支払いカード情報を含む支払い情報を送信および更新するための安全なフォームを作成できます。

支払いの金額と頻度を決定した後、Recurlyは、クライアントが登録解除されるまで、支払いのスケジュールと承認を処理します。 Recurlyは、料金プラン、計算、預金、追加支払いの控除の変更も考慮します。

2つの記事の最初の記事では、 Laravel phpフレームワークとRecurly支払い受け入れサービスを使用して作成されたサイトを使用して、有料サブスクリプションを作成する方法を示します。 まず、簡単な登録、承認、およびユーザー権限を持つサイトを作成します。 次に、支払い処理を追加し、登録プロセスにリンクします。これにより、ユーザーはさまざまな料金プランを購入できます。



アプリケーションをインストールします。



プロジェクトの新しいフォルダーを作成し、次のコマンドを起動して、アプリケーションの作成を始めましょう。

composer create-project laravel/laravel recurly --prefer-dist
      
      





このコマンドは、Composerを使用して新しいLaravelアプリケーションを作成し、フレームワークと必要なすべての依存関係をダウンロードします。 後でいくつかのライブラリが必要になるため、次の行をcomposer.jsonに追加してcomposer.phar updateを実行します

 "machuga/authority": "dev-develop", "machuga/authority-l4" : "dev-master", "recurly/recurly-client": "2.1.*@dev"
      
      





Authorityライブラリがダウンロードされます。これは、ユーザーのロールとアクセス許可、およびRecurlyライブラリの作成に使用されます。

次に、ファイルapp / config / database.phpでスキームの値、ユーザー、パスワード、およびデータベースのアドレスを指定して、データベースへの接続を構成する必要があります。 Laravelは、MySql、Posrges、SQLite、およびSQL Serverのデータベースですぐに使用できます。

また、ユーザーとのテーブルが必要になります。 すべてを手作業で行う代わりに、Laravelが提供する移行メカニズムを使用します。 次のコマンドを実行します。

 php artisan migrate:make create_users_table
      
      





このコマンドは、 アプリ/データベース/移行フォルダーに移行ファイルを作成します

 public function up() { Schema::create('users', function($table) { $table->increments('id'); $table->string('email')->unique(); $table->string('name'); $table->string('password'); $table->timestamps(); }); } public function down() { Schema::drop('users'); }
      
      





コマンドラインに戻って実行してみましょう:

 php artisan migrate
      
      





データベースを調べて、Laravelがユーザーを含むテーブルを作成したことを確認しましょう。



ユーザーの役割と権限を作成します。



ユーザーのタイプとこのユーザーの権限を決定するために、ユーザーのロールを設定します。 すでに作曲家とともにAuthoriryライブラリをダウンロードしており、ロールを完全に構成するには、さらにいくつかの手順を実行する必要があります。

app / config / app.phpファイルで 、次の行を追加します。

 'Authority\AuthorityL4\AuthorityL4ServiceProvider',
      
      





エイリアスに次の行を追加します。

 'Authority' => 'Authority\AuthorityL4\Facades\Authority',
      
      





次のコマンドで機関設定ファイルを公開します。

 php artisan config:publish machuga/authority-l4
      
      





後で設定ファイルに戻ります。 そして、データベースにいくつかの追加テーブルを作成する必要があります。 幸い、Laravelには独自の移行が含まれています。 次のコマンドでそれらを実行します。

 php artisan migrate --package="machuga/authority-l4"
      
      





3つの追加テーブルが作成されていることがわかります: permissionsrolesrole_user

次に、ロールとアクセス権を操作するためのモデルを作成する必要があります。 それらを変更し、非常にシンプルなままにするまで。 app / models / Role.phpで

 <?php class Role extends Eloquent { }
      
      





ファイル内: app / models / Permission.php

 <?php class Permission extends Eloquent { }
      
      





ここで、ユーザーモデルを変更する必要があります。これは既に作成されているので、ユーザーのロールとアクセス権を持つ接続を追加します。 app / models / User.phpに次の行を追加します。

 public function roles() { return $this->belongsToMany('Role'); } public function permissions() { return $this->hasMany('Permission'); } public function hasRole($key) { foreach($this->roles as $role){ if ($role->name === $key) { return true; } } return false; }
      
      





次に、データベースにデータを入力します。 app / database / seeds / DatabaseSeeder.phpファイルを開き、次を貼り付けます。

 <?php class DatabaseSeeder extends Seeder { public function run() { Eloquent::unguard(); $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); $this->call('RoleTableSeeder'); $this->command->info('Role table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array( 'email' => 'joe.bloggs@example.com', 'name' => 'Joe Bloggs', 'password' => Hash::make('password') )); } } class RoleTableSeeder extends Seeder { public function run() { DB::table('roles')->delete(); Role::create(array('name' => 'admin')); Role::create(array('name' => 'pending')); Role::create(array('name' => 'member')); Role::create(array('name' => 'bronze')); Role::create(array('name' => 'silver')); Role::create(array('name' => 'gold')); } }
      
      





次に、次のコマンドを実行してデータベースを満たします。

 php artisan db:seed
      
      







テンプレートを作成する



次に、ページの共通テンプレートを作成します。 このためにTwitter Bootstrapをダウンロードし、ソースをパブリックフォルダーに入れ、jsファイルをフォルダーに入れます-public / js / libs /

次のコードでapp / views / layouts / default.blade.phpファイルを作成します:

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Subscription Site Tutorial</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="author" content=""> <!-- Le styles --> <link href="/css/bootstrap.css" rel="stylesheet"> <link href="/css/style.css" rel="stylesheet"> </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="brand" href="#">Subscription Site Tutorial</a> <div class="nav-collapse collapse"> <ul class="nav"> <li class="active"><a href="#">Home</a></li> <li><a href="#about">About</a></li> <li><a href="#contact">Contact</a></li> </ul> </div><!--/.nav-collapse --> </div> </div> </div> <div class="container"> @if(Session::has('success')) <div class="alert alert-success"> <button type="button" class="close" data-dismiss="alert">×</button> {{ Session::get('success') }} </div> @endif @if(Session::has('error')) <div class="alert alert-error"> <button type="button" class="close" data-dismiss="alert">×</button> {{ Session::get('error') }} </div> @endif @yield('content') </div> <!-- /container --> <!-- Le javascript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="/js/libs/bootstrap.min.js"></script> </body> </html>
      
      





これはサイトの基本テンプレートであり、ページコンテンツは@yield( 'content')行に表示されます。

次に、ファイルpublic / css / style.cssを作成します。

 body { padding-top: 50px; } p.logged-in { color: white; margin-top: 0.5em; }
      
      





最後に、サイトのメインページを作成します。 app / views / home / index.blade.phpファイルを作成します

 @extends('layouts.default') @section('content') <h1>Subscription Site Tutorial</h1> @stop
      
      





@extendsは、作成したばかりのデフォルトテンプレートを使用するようにLaravelに指示します。

app / routes.phpファイルでサイトのルーティングを変更することを忘れないでください:

 Route::get('/', function() { return View::make('home/index'); });
      
      





認証メカニズムを作成する



ユーザーがいるので、今度は承認する機会をユーザーに与える必要があります。 app / routse.phpファイルで、ログインページへのパスを追加します。

 Route::get('/auth/login', function() { return View::make('auth/login'); });
      
      





ここで、ファイルapp / views / auth / login.blade.phpに表示を作成します。 .blacdeは 、Laravelに付属の Bladeテンプレートエンジンを使用していることを意味します。

 @extends('layouts.default') @section('content') <h1>Please Log in</h1> {{ Form::open(array('url' => 'auth/login')) }} {{ Form::label('email', 'E-Mail Address') }} {{ Form::text('email') }} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} <div class="form-actions"> {{ Form::submit('Login', array('class' => 'btn btn-primary')) }} </div> {{ Form::close() }} <p>Not a member? <a href="/user/register">Register here</a>.</p> @stop
      
      





アドレス/ auth / lognにアクセスすると、簡単なログインフォームが表示されます。 入力を処理するには、POSTデータを処理する必要があります。 Laravelへのログインは簡単です:

 Route::post('/auth/login', function() { $email = Input::get('email'); $password = Input::get('password'); if (Auth::attempt(array('email' => $email, 'password' => $password))) { return Redirect::to('/')->with('success', 'You have been logged in'); } else { return Redirect::to('auth/login')->with('error', 'Login Failed'); } return View::make('auth/login'); });
      
      





すべての魔法は認証::試行()メソッドにあります。認証が成功した場合、セッションが作成され、静的認証::ユーザー()メソッドを介してユーザーオブジェクトのインスタンスにアクセスします。

アカウントのログアウト方法:

 Route::get('/auth/logout', function() { Auth::logout(); return Redirect::to('/')->with('success', 'You have successfully logged out'); });
      
      







基本登録



このパートでの最後のタスクは、登録プロセスを作成することです。 app / routse / phpファイルに登録用のパスを作成します。

 Route::get('/user/register', function() { return View::make('user/register/index'); });
      
      





ファイル/app/views/user/register/index.blade.phpにビューを作成します。

 @extends('layouts.default') @section('content') {{ Form::open(array('url' => 'user/register')) }} {{ Form::label('email', 'E-Mail Address') }} {{ Form::text('email') }} {{ $errors->first('email') }} {{ Form::label('name', 'Your name') }} {{ Form::text('name') }} {{ $errors->first('name') }} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} {{ $errors->first('password') }} {{ Form::label('password_confirmation', 'Repeat') }} {{ Form::password('password_confirmation') }} <div class="form-actions"> {{ Form::submit('Register', array('class' => 'btn btn-primary')) }} </div> {{ Form::close() }} @stop
      
      





いくつかの点に注意します。



それでは、POSTデータの処理に移りましょう。

 Route::post('/user/register', function() { $validator = Validator::make( Input::all(), array( 'name' => array('required', 'min:5'), 'email' => array('required', 'email', 'unique:users'), 'password' => array('required', 'confirmed') ) ); if ($validator->passes()) { $user = new User(); $user->name = Input::get('name'); $user->email = Input::get('email'); $user->password = Hash::make(Input::get('password')); $user->save(); $role_pending = Role::where('name', '=', 'pending')->first(); $user->roles()->attach($role_pending); Auth::login($user); return Redirect::to('/')->with( 'success', 'Welcome to the site, . Auth::user()->name . '!' ); } else { return Redirect::to('user/register')->with( 'error', 'Please correct the following errors:' )->withErrors($validator); } });
      
      





これはかなり簡単な方法です。 バリデーターを作成し、POSTデータ(入力:: all())を渡し、検証のルールを定義します。 検証に合格したら、新しいユーザーを作成し、そのユーザーにロールを割り当て、承認して、メインページにリダイレクトします。

検証が失敗した場合、ユーザーをフォームにリダイレクトし、エラーメッセージを作成し、エラーメッセージをバリデーターから送信します。これは、$ errors変数のビューから利用できます。



おわりに



このパートでは、有料サブスクリプションを操作するためのアプリケーションの「スケルトン」を段階的に作成しました。 次のパートでは、Recurlyを統合してサブスクリプションを使用します。



All Articles