https://www.itsolutionstuff.com/post/laravel-10-bootstrap-auth-scaffolding-tutorialexample.html composer require laravel/ui npm install && npm run build php artisan migrate USER MUST BE VERIFIED LoginController: protected function authenticated(Request $request, $user) { if(!$user->email_verified_at ){ $this->logout($request); } } DONT LOGIN AFTER REGISTRATION RegisterContoller: public function register(Request $request) { $this->validator($request->all())->validate(); event(new Registered($user = $this->create($request->all()))); // $this->guard()->login($user); if ($response = $this->registered($request, $user)) { return $response; } return $request->wantsJson() ? new JsonResponse([], 201) : redirect($this->redirectPath()); }
Config::set
Config::set(‘database.connections.mysql.database’, ‘db_name’);
ignore ext
composer.json:
"config": {
"platform": {
"ext-pcntl": "7.1",
"ext-posix": "7.1"
}
}
Migrate to other Database
php artisan migrate --database=db_connection_name php artisan migrate --database=db_connection_name --seed php artisan migrate:refresh --database=db_connection_name --seed
guzzlehttp – http client
1. composer require guzzlehttp/guzzle
2. $client = new \GuzzleHttp\Client();
3. $res = $client->request('GET', 'https://api.exchangeratesapi.io/latest');
echo $res->getStatusCode();
echo $res->getHeader('content-type')[0];
dd( json_decode($res->getBody()) );
http://docs.guzzlephp.org/en/stable/
nWidart modules
nWidart/laravel-modules https://github.com/nWidart/laravel-modules https://nwidart.com/laravel-modules/v6/basic-usage/
Tutorial https://medium.com/@destinyajax/how-to-build-modular-applications-in-laravel-the-plug-n-play-approach-part-2-c23e8089aeee?
Examples
php artisan module:make <module-name>
php artisan module:make Blog User Auth (multiple modules)
php artisan module:make Blog --plain
# or
php artisan module:make Blog -p
php artisan module:make-model Customers <module-name>
php artisan module:make-model Customers -m <module-name> (with migration)
php artisan module:make-migration create_customers_table <module-name>
php artisan module:make-controller CustomersController <module-name>
php artisan module:migrate <module-name>
php artisan module:seed <module-name>
eloquent query scope
Defining A Query Scope
class User extends Eloquent {
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
public function scopeWomen($query, $gender)
{
return $query->whereGender($gender);
}
}
Utilizing A Query Scope
$users = User::popular()->women($gender)->orderBy('created_at')->get();
laravel dusk
works on windows (atkrp demesi i: chromedriver)
composer require --dev laravel/dusk:"^5.4"
composer require --dev laravel/dusk - latest version
it needs pcntl (dont work on windows)
chromedriver
https://github.com/laravel/dusk/issues/490
https://chromedriver.storage.googleapis.com/index.html?path=2.36/
download chromedriver and put in directory: vendor/laravel/dusk/bin
Managing ChromeDriver Installations
php artisan dusk:chrome-driver --all
https://laravel.com/docs/6.x/dusk
phpunit testing-database
model read-only
1. You can setup global listener for all the models:
Event::listen('eloquent.saving: *', function ($model) {
return false;
});
2. Or for given model:
Event::listen('eloquent.saving: User', function ($user) {
return false;
});
// or
User::saving(function ($user) {
return false;
});
// If it's not global, but for single model, then I would place it in boot():
// SomeModel
public static function boot()
{
parent::boot();
static::saving(function ($someModel) {
return false;
});
}
3. For read-only model you need just one saving event listener returning false, then all: Model::create, $model->save(), $model->update() will be rejected.
4. Here's the list of all Eloquent events: booting, booted, creating, created, saving, saved, updating, updated, deleting, deleted and also restoring and restored provided by SoftDeletingTrait.
https://stackoverflow.com/questions/28203317/prevent-certain-crud-operations-on-laravel-eloquent-models
ajaxSetup
<input name='_token' type="hidden" value="{{csrf_token()}}" />
arba
echo csrf_field(); //sukuria input, auksciau
------------
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
Paysera
PVZ http://programuoti.lt/php/laravel/laravel-paysera-mokejimai/
Laravel Collective – checkboxes checked
Example: Player groups
{{ Form::model($player, ['route'=>['players.update', $player->id], 'method'=>'PUT']) }}
@foreach($groups as $group)
{{ Form::checkbox('groups[]', $group->id, null, ['id' => 'group-'.$group->id] ) }}
@endforeach
{{ Form::close() }}
Passport
https://laravel.com/docs/5.7/passport https://tutsforweb.com/laravel-passport-create-rest-api-with-authentication/
laravel 5.5 composer require laravel/passport=~4.0 1. composer require laravel/passport 2. php artisan migrate 3. php artisan passport:install
1. User.php
use Laravel\Passport\HasApiTokens;
class User{
use HasApiTokens, ...
}
2. AuthServiceProvider.php
use Laravel\Passport\Passport;
boot(){
Passport::routes();
}
3. config\auth.php
'api' => [
'driver' => 'passport',
'provider' => 'users'
]
Route::post('login', 'PassportController@login');
Route::post('register', 'PassportController@register');
Route::middleware('auth:api')->get('user', 'PassportController@details');
public function register(Request $request)
{
$this->validate($request, [
'name' => 'required|min:3',
'email' => 'required|email|unique:users',
'password' => 'required|min:6',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password)
]);
$token = $user->createToken('TutsForWeb')->accessToken;
return response()->json(['token' => $token], 200);
}
public function login(Request $request)
{
$credentials = [
'email' => $request->email,
'password' => $request->password
];
if (auth()->attempt($credentials)) {
$token = auth()->user()->createToken('TutsForWeb')->accessToken;
return response()->json(['token' => $token], 200);
} else {
return response()->json(['error' => 'UnAuthorised'], 401);
}
}
public function details()
{
return response()->json(['user' => auth()->user()], 200);
}
public function logout(Request $request){
$logged_out = false;
if (auth()->check())
$logged_out = auth()->user()->token()->revoke();
$data = ['logged_out' => $logged_out];
return response()->json($data, 200);
}
after laravel install
PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes")
app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
function boot()
{
Schema::defaultStringLength(200); //Solved by increasing StringLength
}
server permissions
sudo chmod 755 -R laravel_blog
chmod -R o+w laravel_blog/storage
send mailtrap
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=916249ab352970 MAIL_PASSWORD=4296decca31963 MAIL_ENCRYPTION=null https://mailtrap.io/inboxes/251900/settings
send gmail
GMAIL Allow less secure apps: ON https://myaccount.google.com/lesssecureapps?pli=1
Open your mail.php under config folder then fill with this option :
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' =>env('MAIL_HOST', 'smtp.gmail.com'),
'port' =>env('MAIL_PORT', 587),
'from' => ['address' =>'youremail@mail.com', 'name' => 'Email_Subject'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' =>env('MAIL_USERNAME','yourusername@mail.com'),
'password' =>env('MAIL_PASSWORD','youremailpassword'),
'sendmail' =>'/usr/sbin/sendmail -bs',
Open your .env file under root project. Also edit this file following above option such
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=youremailusername<br>
MAIL_PASSWORD=youremailpassword
MAIL_ENCRYPTION=tls
After that clear your config by running this command
php artisan config:cache
Restart your local server
cors
siulau naudoti package: https://github.com/barryvdh/laravel-cors ARBA ziureti zemiau
KERNEL.php: \App\Http\Middleware\Cors::class,
namespace App\Http\Middleware;
use Closure;
class Cors
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$domains = ['http://localhost:8080'];
//header('Access-Control-Allow-Origin: *');
if(isset($request->server()['HTTP_ORIGIN'])){
$origin = $request->server()['HTTP_ORIGIN'];
if( in_array($origin, $domains) ){
header('Access-Control-Allow-Origin: ' . $origin);
header('Access-Control-Allow-Headers: Origin, Content-Type, Authorization');
}
}
return $next($request);
}
}