agenciafmd /admix-postal
此包最新版本(1.0.0)没有提供许可信息。
Postal - Agência F&M&D
1.0.0
2019-11-06 13:52 UTC
Requires
- laravel/framework: 5.8.*
- msurguy/honeypot: dev-master
README
- 使用 admix 简单且可配置的表单发射
安装
composer require agenciafmd/admix-postal:dev-master
执行迁移
php artisan migrate
如果需要种子,请执行发布
php artisan vendor:publish --tag=admix-postal:seeders
不要忘记执行 composer dumpautoload
请求
创建文件 /packages/agenciafmd/frontend/src/Http/Requests/ContactRequest.php
<?php namespace Agenciafmd\Frontend\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ContactRequest extends FormRequest { protected $errorBag = 'contact'; public function rules() { return [ 'hp_name' => 'honeypot', 'hp_time' => 'required|honeytime:5', 'subject' => 'required', 'name' => 'required', 'email' => 'required|email', 'phone' => 'required', 'city' => 'required', 'state' => 'required', 'message' => 'required' ]; } public function attributes() { return [ 'name' => 'nome', 'phone' => 'telefone', 'city' => 'cidade', 'state' => 'estado', 'message' => 'mensagem' ]; } public function authorize() { return true; } }
控制器
创建文件 /packages/agenciafmd/frontend/src/Http/Controllers/ContactController.php
<?php namespace Agenciafmd\Frontend\Http\Controllers; use Agenciafmd\Frontend\Http\Requests\ContactRequest; use Agenciafmd\Postal\Notifications\SendNotification; use Agenciafmd\Postal\Postal; use App\Http\Controllers\Controller; use Illuminate\Support\Str; class ContactController extends Controller { public function index() { $view = []; return view('agenciafmd/frontend::pages.contact', $view); } public function send(ContactRequest $request) { // se houver anexos $attachments = null; if ($request->has('images')) { $images = $request->file('images'); foreach ($images as $image) { $customName = Str::slug($request->get('name') . '-' . str_random(5)) . '.' . $image->getClientOriginalExtension(); $attachments[] = storage_path( 'app/' . $image ->storeAs('attachments', $customName, 'local') ); } } // para customizar o assunto do email $subject = null; Postal::where('slug', Str::slug($request->get('subject')))->first()->notify(new SendNotification([ 'greeting' => $request->get('subject'), 'introLines' => [ '**Nome:** ' . $request->get('name'), '**E-mail:** ' . $request->get('email'), '**Telefone:** ' . $request->get('phone'), '**Cidade:** ' . $request->get('city') . ' - ' . $request->get('state'), '**Mensagem:** ' . nl2br($request->get('message')), ], ], [$request->get('email') => $request->get('name')], $attachments, $subject)); flash('Mensagem enviada com sucesso')->success(); return back(); } }
表单
创建文件 /packages/agenciafmd/frontend/src/resources/views/pages/contact.blade.php
{{ Form::open([ 'route' => 'frontend.contacts.send', 'id' => 'form-contact', 'class' => 'form needs-validation' . ((count($errors->contact) > 0) ? ' was-validated' : ''), 'autocomplete' => 'off', 'novalidate' => true ]) }} {!! Honeypot::generate('hp_name', 'hp_time') !!} ... <label for="name" class="sr-only">Nome</label> {{ Form::text('name', null, [ 'class' => 'form-control ' . ($errors->contact->has('name') ? ' is-invalid' : ''), 'id' => 'name', 'placeholder' => 'Nome', 'required' => true, ]) !!} <div class="invalid-feedback"> <span> @if($errors->contact->has('name')) {{ $errors->contact->first('name') }} @else O campo nome é obrigatório @endif </span> </div> ... {{ Form::close() }}
路由
创建文件 /packages/agenciafmd/frontend/src/routes/web.php
Route::get('/fale-conosco', [ContactController::class, 'index']) ->name('frontend.contacts.index'); Route::post('/fale-conosco', [ContactController::class, 'send']) ->name('frontend.contacts.send');