https://GunFreeZone.net/wp-content/uploads/2016/01/cropped-gfz-ico.png
This killed me…
OMG
pic.twitter.com/MzftUclptQ
— General
(@TheGeneral_0) November 15, 2023
Gun Free Zone
Just another WordPress site
https://GunFreeZone.net/wp-content/uploads/2016/01/cropped-gfz-ico.png
This killed me…
OMG
pic.twitter.com/MzftUclptQ
— General
(@TheGeneral_0) November 15, 2023
Gun Free Zone
https://ahtesham.me/storage/posts/September2023/BTEscC4HKqWPfEpZoOji.jpg
In this tutorial, we’ll learn how to create a RESTful API using Laravel 10 and Laravel Sanctum. We’ll also explore how to test CRUD operations (create, read, update, delete) on RESTful APIs with Sanctum authentication in Laravel 10. This is a simple example of working with Laravel 10 Sanctum.
Throughout this tutorial, you’ll discover how to build APIs in Laravel with the help of the Laravel Sanctum package. Sanctum authenticates incoming HTTP requests by checking the Authorization header, which contains a valid API token. It efficiently manages user API tokens by storing them in a single database table.
Let us begin the tutorial by installing a new laravel application. if you have already created the project, then skip following step.
composer create-project laravel/laravel example-app
In this step we need to install sanctum via the Composer package manager, so one your terminal and fire bellow command:
composer require laravel/sanctum
After successfully install package, we need to publish configuration file with following command:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
we require to get default migration for create new sanctum tables in our database. so let’s run bellow command.
php artisan migrate
Next, we need to add middleware for sanctum api, so let’s add as like bellow:
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
In this step, we have to configuration on three place model, service provider and auth config file. So you have to just following change on that file.
In model we added HasApiTokens class of Sanctum,
In auth.php, we added api auth configuration.
app/Models/User.php
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasApiTokens;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Read More : Laravel 10 Get Current Logged in User Data Example
next, we require to create migration for posts table using Laravel 10 php artisan command, so first fire bellow command:
php artisan make:migration create_posts_table
After this command you will find one file in following path database/migrations and you have to put bellow code in your migration file for create posts table.
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
};
After create migration we need to run above migration by following command:
php artisan migrate
After create “posts” table you should create Post model for posts, so first create file in this path app/Models/Post.php and put bellow content in item.php file:
app/Models/Post.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title', 'body'
];
}
In this step, we will create api routes for login, register and posts rest api. So, let’s add new route on that file.
routes/api.php
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\API\RegisterController;
use App\Http\Controllers\API\PostController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::controller(RegisterController::class)->group(function(){
Route::post('register', 'register');
Route::post('login', 'login');
});
Route::middleware('auth:sanctum')->group( function () {
Route::resource('posts', PostController::class);
});
For the next step, we’ll create three new controllers: BaseController, PostController, and RegisterController. To keep our API controllers organized, we’ll create a new folder named “API” within the Controllers directory. Here’s how to create these controllers:
php artisan make:controller BaseController
app/Http/Controllers/API/BaseController.php
<?php
namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller as Controller;
class BaseController extends Controller
{
/**
* success response method.
*
* @return \Illuminate\Http\Response
*/
public function sendResponse($result, $message)
{
$response = [
'success' => true,
'data' => $result,
'message' => $message,
];
return response()->json($response, 200);
}
/**
* return error response.
*
* @return \Illuminate\Http\Response
*/
public function sendError($error, $errorMessages = [], $code = 404)
{
$response = [
'success' => false,
'message' => $error,
];
if(!empty($errorMessages)){
$response['data'] = $errorMessages;
}
return response()->json($response, $code);
}
}
php artisan make:controller RegisterController
app/Http/Controllers/API/RegisterController.php
<?php
namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\API\BaseController as BaseController;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Validator;
class RegisterController extends BaseController
{
/**
* Register api
*
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
]);
if($validator->fails()){
return $this->sendError('Validation Error.', $validator->errors());
}
$input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$success['token'] = $user->createToken('MyApp')->plainTextToken;
$success['name'] = $user->name;
return $this->sendResponse($success, 'User register successfully.');
}
/**
* Login api
*
* @return \Illuminate\Http\Response
*/
public function login(Request $request)
{
if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')->plainTextToken;
$success['name'] = $user->name;
return $this->sendResponse($success, 'User login successfully.');
}
else{
return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);
}
}
}
php artisan make:controller PostController
app/Http/Controllers/API/PostController.php
<?php
namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\API\BaseController as BaseController;
use App\Http\Resources\PostResource;
use App\Models\Post;
use Validator;
class PostController extends BaseController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$posts = Post::all();
return $this->sendResponse(PostResource::collection($posts), 'Post retrieved successfully.');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$input = $request->all();
$validator = Validator::make($input, [
'title' => 'required',
'body' => 'required'
]);
if($validator->fails()){
return $this->sendError('Validation Error.', $validator->errors());
}
$post = Post::create($input);
return $this->sendResponse(new PostResource($post), 'Post created successfully.');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$post = Post::find($id);
if (is_null($post)) {
return $this->sendError('Post not found.');
}
return $this->sendResponse(new PostResource($post), 'Post retrieved successfully.');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Post $post)
{
$input = $request->all();
$validator = Validator::make($input, [
'title' => 'required',
'body' => 'required'
]);
if($validator->fails()){
return $this->sendError('Validation Error.', $validator->errors());
}
$post->title = $input['title'];
$post->body = $input['body'];
$post->save();
return $this->sendResponse(new PostResource($post), 'Post updated successfully.');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
$post->delete();
return $this->sendResponse([], 'Post deleted successfully.');
}
}
Creating API resources in Laravel is indeed an important step for building a REST API. API resources help you define a consistent and customizable response format for your model objects. To create an API resource in Laravel 10, you can use the following command:
php artisan make:resource PostResource
Now there created new file with new folder on following path:
app/Http/Resources/PostResource.php
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'body' => $this->body,
'created_at' => $this->created_at->format('d/m/Y'),
'updated_at' => $this->updated_at->format('d/m/Y'),
];
}
}
All steps have been done, now you have to type the given command and hit enter to run the laravel app:
php artisan serve
Now, you have to open web browser, type the given URL and view the app output:
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
]
Here is Routes URL with Verb:
Now simply you can run above listed URL like as bellow screen shot:
1. Register API: Verb:GET, URL:http://localhost:8000/api/register
2. Login API: Verb:GET, URL:http://localhost:8000/api/login
3. Post List API: Verb:GET, URL:http://localhost:8000/api/posts
4. Post Create API: Verb:GET, URL:http://localhost:8000/api/posts
5. Post Show API: Verb:GET, URL:http://localhost:8000/api/posts/{id}
6. Post Update API: Verb:PUT, URL:http://localhost:8000/api/posts/{id}
7. Post Delete API: Verb:DELETE, URL:http://localhost:8000/api/posts/{id}
I hope it can help you…
Laravel News Links
https://planetscale.com/assets/blog/content/mysql-replication-best-practices-and-considerations/mysql-replication-best-practices-social.jpgLearn the best practices for configuring MySQL replication, and how to ensure your data is always available.Planet MySQL
https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/headlamps-and-lanterns-color-mode-lead-6555141dcff52.jpg?crop=1.00xw:0.752xh;0,0.0938xh&resize=640:*
Have you ever wondered why headlamps and camp lights come with a red or orange setting? It’s not just for ambience — there’s a surprising benefit to switching from bright white to more mellow red. If you’re sick of dealing with a tent full of flying bugs, this info is for you.
According to the North Carolina State University Agriculture and State Sciences Department: “Most insects have only two types of visual pigments. One pigment absorbs green and yellow light (550 nm); the other absorbs blue and ultraviolet light (<480 nm). Insects cannot see red.” Even if the reasons don’t interest you, the results should. Your camping lantern has a red light mode. Use it, and you won’t attract insects.
I’ve tried this trick myself: At camp I typically use a Biolite Headlamp 325 and Goal Zero Crush Light Chroma, when I’m not testing other lighting solutions. They’re both lightweight, easy to operate and the Goal Zero has solar charging; I leave it on the dash to soak up the sun during the day’s drive, and it’s ready to go when then sun starts to set.
First, I tested the headlamp: Anyone who’s worn a headlamp during the evening at camp is probably familiar with the flickering, flying bugs that are drawn to your face almost immediately after you turn your headlamp on. It’s annoying and can make seeing clearly a chore, cancelling out the appeal of the headlamp in the first place. Sure enough, with the standard white light setting I had bugs up in my grill; once I switched it to red, they all left me alone.
Same with the Crush Light Chroma. We keep one in our GoFast Camper and have built a routine around the red light. When we’re getting into the tent and need to see and have panels open, we set the Chroma to red. No bugs follow us inside, and once we’re in and all the tent flaps are securely shut, we’ll switch to white light. It is trickier to see details at night with red light, so we mostly use if for entering and exiting the tent, and reserve the white light reserved for use after we’ve tucked in for the evening.
Nearly all headlamps come with a red light setting, but read the product description rather than assuming. Camp lights and lanterns aren’t equipped with red light as widely, so check to make sure your pick has the ability to go into red mode. With that in mind, here are a few of my favorites for keeping bugs at bay.
Gear Patrol
https://GunFreeZone.net/wp-content/uploads/2023/11/Screenshot_20231114_100341_Amazon-Shopping.jpg
I’ve been watching all these videos of people mobbing cars and harassing Jews, and it reminds me that you need to check your tire pressure this time of year because the cold weather can make your tires run low.
I found this on Amazon and it looks like it might be useful to have.
Like everyone knows, there’s nothing like a nice piece of hickory.
Gun Free Zone
https://www.ammoland.com/wp-content/uploads/2023/11/Houston-gun-turn-in-buyback-Nov-18-2023-1000-500×367.jpg

On Saturday, 18 November, the city of Houston will host a gun buyback event. The event will be held at Westchase Park and Ride, 11050 Harwin Drive, Houston, from 8 a.m. to Noon. No questions will be asked of people turning in guns for gift cards. The event is funded with American Rescue Plan money, part of the 1.6 trillion dollar Biden Administration spending, which is driving inflation.
In a previous Houston event, on July 30, 2022, an activist turned in a box full of 3D-printed crude, single-shot pistols and walked away with a significant chunk of change. The upcoming event on November 18 will not pay for “ghost guns.”
The Biden administration claims “ghost guns” are excessively dangerous. In a brief to the Supreme Court, the Biden administration makes this claim:
Ghost guns can be made from kits and parts that are available online to anyone with a credit card and that allow anyone with basic tools and rudimentary skills (or access to Internet video tutorials) to assemble a fully functional firearm in as little as twenty minutes. Some manufacturers of those kits and parts assert that they are not “firearms” regulated by federal law, and thus can be sold without serial numbers, transfer records, or background checks. Those features of ghost guns make them uniquely attractive to criminals and others who are legally prohibited from buying firearms.
The problem with accepting “ghost guns” at the gun turn-in scheduled for Houston is that “ghost guns” quickly transfer gift cards from the event to people who are willing to spend a few dollars on making “ghost guns.” Accepting “ghost guns” undercuts the propaganda value of the event. Not accepting “ghost guns” undercuts “ghost gun” propaganda.
When the event only offers $100 for working rifles or shotguns, a nice old double barrel might be picked up for $120. Maybe someone will have Grandpa’s old Browning Auto-5 for $150. A purchase of $175 might bag a Smith & Wesson model 10 in good condition. At the recent gun turn-in at Dallas, one participant procured a minty Colt, pre-ban SP-1, a desirable collector item worth $2,000 to $3,000 for $400.
Even well-funded events, such as in Houston, usually run out of gift cards before the event ends. Private buyers often make very good deals after the gift cards run out. Private purchase of firearms is legal in most states, as it is in Texas.
The Heller decision mentioned regulation of the commercial sale of firearms might be accepted under the Second Amendment. This implies private sales of firearms should not be regulated. The private sale of firearms acts as a check against creating a firearms registry. The only serious purpose of a firearms registry is to facilitate the confiscation of private arms, whether wholesale or piecemeal.
Academic studies have found gun turn-in events do not reduce homicides or suicides. They may do some harm with a slight uptick in gun crimes following these events.
Lines for these events start early. Those who come first are the most likely to obtain gift cards before they run out. This offers an opportunity to private purchasers to talk to people in line to see what they have.
There are certain to be private purchasers at the Houston turn-in event. This correspondent expects to publish a report after the event has ended.
About Dean Weingarten:
Dean Weingarten has been a peace officer, a military officer, was on the University of Wisconsin Pistol Team for four years, and was first certified to teach firearms safety in 1973. He taught the Arizona concealed carry course for fifteen years until the goal of Constitutional Carry was attained. He has degrees in meteorology and mining engineering, and retired from the Department of Defense after a 30 year career in Army Research, Development, Testing, and Evaluation.

AmmoLand Shooting Sports News
https://picperf.io/https://laravelnews.s3.amazonaws.com/featured-images/turbine-ui.jpg
Turbine UI is a library of web components built for Laravel Blade and styled with Tailwind CSS. Turbine UI has been designed with simplicity and flexibility in mind, making it easy for you to style your apps and features over 30 professionally designed components.
You can effortlessly deploy these components out of the box or tailor them to perfection using the proprietary theme and variant systems.
Building a Laravel front-end with Turbine UI transforms the design process into a seamless joy, ensuring maintainability is a breeze.
You can get started for free by installing Turbine UI via Composer:
composer require brandymedia/turbine-ui-core
Also, check out the home page and official documentation for more details.
The post Turbine UI – Laravel Blade & Tailwind CSS UI Component Library appeared first on Laravel News.
Join the Laravel Newsletter to get all the latest Laravel articles like this directly in your inbox.
Laravel News
https://forgebuddy.com/images/app/menubar-2.pngLaravel News Links
https://forgebuddy.com/images/app/menubar-2.pngLaravel News Links
https://cdn.thewirecutter.com/wp-content/media/2023/11/buyingusedcameragear-2048px-mirrorlesscameras-3×2-1.jpg?auto=webp&quality=60&width=630&dpr=2

Let’s be real—camera gear is expensive. And the hit to your wallet can feel most acute as you’re starting to build a system from scratch, when a new entry-level camera costs you north of $500, and it may not even come with a lens. Buying used, however, can get you 90% of the quality and longevity of new gear at 60% of the price. That’s a deal that’s hard to turn down.
Wirecutter: Reviews for the Real World