mardi 29 août 2023

How to fetch data from database using multiple dropdown in form laravel 5.4?

I have blade view which is basically a form consists of 3 dropdown value such as Division,District and Upazila. Blade View

my Index blade looks like below image. Index Blade

after the submit button clicked,it shows me page not found.i don't have any idea why it didn't go to controller method. enter image description here

Route:

Route::get('booksnew/allinstbyupazila', [
                'as' => 'admin.booksnew.allinstbyupazila',
                'uses' => 'BooksNewController@allinstbyupazila']);

Controller:

public function allinstbyupazila(BooksRequest $request) {

        $module_name = $this->module_name;
        $module_icon = $this->module_icon;
        $module_model = $this->module_model;

        $module_action = "List";

        $title = "Upazila wise Institute List";
        $page_heading = $title;

        $division = $request->division_id;
        $district = $request->district_id;
        $upazila = $request->upazila_id;
        dd($request->all());

        if ($division == '' || $district == '' || $upazila == ''){
            Log::info("'$title' viewed by User:" . Auth::user()->name . '(ID:' . Auth::user()->id . ')');

            return view("backend.$module_name.upazila_input", compact('page_heading', 'title', 'module_name', 'module_icon', 'page_heading', 'module_action'));

        } else {
            if (Auth::user()->hasRole('Administrator')) {
            
                $$module_name = $module_model::where('division_id', $division)
                    ->where('district_id', $district)
                    ->where('upazila_id', $upazila)
                    ->get();
                
            }else

                return redirect()->back()->with('flash_warning', '<i class="fa fa-exclamation-triangle"></i> Do not have the permission');

        }

        Log::info("'$title' viewed by User:" . Auth::user()->name . '(ID:' . Auth::user()->id . ')');
        
        return view("backend.$module_name.index", compact('division', 'district','upazila', 'title', 'module_name', "$module_name", 'module_icon', 'page_heading', 'module_action'));

I try everything i could but didn't find any solution yet.i just need to fetch data from the dropdown value as parameter and show the fetched data in another blade view.help me asap.



via Chebli Mohamed

mercredi 23 août 2023

laravel sanctum api working fine with postman but not working with flutter

I'm New in Laravel but I know flutter here what I am trying to achieve I have created a Laravel Api where token is generated by sanctum and I getting the token properly when I test on postman but when I try this from flutter project I get the token but i get this error

{ "message": "Unauthenticated." }

here is my laravel function in controller

`\public function store(Request $request) { $validator = Validator::make($request->all(), [ 'phone_no' => 'required|digits:10', 'name' => 'sometimes|string|nullable', // Allow empty name 'address' => 'sometimes|string|nullable', // Allow empty address 'longitude' => 'sometimes|string|nullable', // Allow empty longitude and latitude 'latitude' => 'sometimes|string|nullable', // Allow empty longitude and latitude 'accuracy' => 'sometimes|string|nullable', // Allow empty longitude and latitude 'referby_coupon' => 'sometimes|string|nullable', // Allow empty referby_coupon ]); // Check for existing user with the same phone number $user = UserModel::where('phone_no', $request->phone_no)->first();

if ($validator->fails()) {
    return response()->json([
        'status' => 422,
        'errors' => $validator->messages()
    ], 422);
} else {
    if ($user) {
          $user->name = $user->name === 'new' ? '' : $user->name;
            $user->address = $user->address === 'new' ? '' : $user->address;
            $user->longitude = $user->longitude === 'new' ? '' : $user->longitude;
             $user->latitude = $user->latitude === 'new' ? '' : $user->latitude;
              $user->accuracy = $user->accuracy === 'new' ? '' : $user->accuracy;
             $user->referby_coupon = $user->referby_coupon === 'new' ? '' : $user->referby_coupon;
              $token = $user->createToken($request->id)->plainTextToken;

        return response()->json([
            'status' => 422,
            'message' => 'User already exists',
            'token' => $token,
            'data' => $user
        ], 422);
    } else {
        // Generate random coupon
        $coupon = $this->generateRandomCoupon();

    $user = UserModel::create([
            'id' => $request->id,
            'name' => $request->name,
            'phone_no' => $request->phone_no,
            'address' => $request->address,
            'longitude' => $request->longitude,
            'latitude' => $request->latitude,
            'accuracy' => $request->accuracy,
            'own_coupon' => $coupon, // Insert the generated coupon here
            'referby_coupon' => $request->referby_coupon,
        ]);

        if ($user) {
         $token = $user->createToken($request->id)->plainTextToken;

            return response()->json([
                'status' => 200,
                'token' => $token,
                'message' => 'User Created Successfully'
            ], 200);
        } else {
            return response()->json([
                'status' => 500,
                'message' => 'Something went wrong'
            ], 500);
        }
    }
}
}

private function generateRandomCoupon($length = 4) { $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $excludedWords = ['CAT', 'DOG', 'SEX','sex', 'FUCK','fuck']; // Add any words you want to exclude here $coupon = '';
do {
    $coupon = '';
    for ($i = 0; $i < $length; $i++) {
        $coupon .= $characters[rand(0, strlen($characters) - 1)];
    }
} while (UserModel::where('own_coupon', $coupon)->exists() || in_array($coupon, $excludedWords, true));

return $coupon;

}`

this is model class

`

protected $table = 'users';
<?php

namespace App\Models; use Laravel\Sanctum\HasApiTokens; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Foundation\Auth\User as Authenticatable; use Laravel\Sanctum\PersonalAccessToken as SanctumPersonalAccessToken;

class UserModel extends Authenticatable { use HasApiTokens, HasFactory, Notifiable;

protected $fillable = [
    'id',
    'name',
    'phone_no',
    'address',
    'longitude',
    'latitude',
    'accuracy',
    'own_coupon',
    'referby_coupon',
    
    
];

protected $primaryKey = "id";

public $timestamps = false;

}`

this is my flutter code

Future<void> setData(String name, String address, String phoneNo,
      String longitudeLatitude, String referByCoupon) async {
    DateTime now = DateTime.now();
    String formattedDate = DateFormat('yyyymmddhhmmsskkmm').format(now);
    var formData = FormData.fromMap({
      'id': formattedDate,
      'name': 'new',
      'address': 'new',
      'phone_no': MyLogin.phoneNoTransfer,
      'longitude': 'new',
      'latitude': 'new',
      'accuracy': 'new',
      'own_coupon': "new",
      'referby_coupon': referByCoupon.isNotEmpty ? referByCoupon : 'new'
    });
    try {
      Dio dio = Dio(BaseOptions(validateStatus: (statusCode) {
        if (statusCode == 422) {
          return true;
        }
        if (statusCode == 200) {
          return true;
        }
        return false;
      }));
      final response = await dio.post(
        options: Options(headers: {
          HttpHeaders.contentTypeHeader: "application/json",
        }),
        '$startUrl/public/api/user',
        data: formData,
      );
      print(response);
      print(response.statusCode);

      String token = response.data['token'];

      if (response.statusCode == 200) {
        SharedPreferencesPersonalData().setToken(token);
        SharedPreferencesPersonalData().setID(int.parse(formattedDate));
        SharedPreferencesPersonalData().setPhoneNo(phoneNo);
      } else if (response.statusCode == 422) {
        final result = response.data['data'];

        print(result);

        int apiId = int.parse(result['id'].toString());
        String apiPhoneNo = result['phone_no'].toString();
        String apiName = result['name'].toString();
        String apiAddress = result['address'].toString();
        String ownCoupon = result['own_coupon'];
        String referByCoupon = result['referby_coupon'];

        SharedPreferencesPersonalData().setID(apiId);
        SharedPreferencesPersonalData().setPhoneNo(apiPhoneNo);
        SharedPreferencesPersonalData().setName(apiName);
        SharedPreferencesPersonalData().setAddress(apiAddress);
        SharedPreferencesPersonalData().setOwnCoupon(ownCoupon);
        SharedPreferencesPersonalData().setReferByCoupon(referByCoupon);
        SharedPreferencesPersonalData().setToken(token);
      } else {
        print(response.statusCode);
      }
    } catch (e) {
      print(e);
    }
  }

I am excepting the token work properly but its not working and i notices that when I use postman in access token id all column fill but when I use login in flutter tokenable id is 0 and i hosted in hostinger

enter image description here

futter where i am getting error enter image description here



via Chebli Mohamed

dimanche 20 août 2023

Undefined variable $artikels in foreach laravel

I have a problem with my laravel project where i can't show my data in the table. It keeps giving me undefined veriable $artikels in my writer.blade.php

So this is my controller

namespace App\Http\Controllers;

use App\Models\Artikel;
use Illuminate\Http\Request;

class ArtikelController extends Controller
{
    public function index()
    {
        $artikels = Artikel::all(); // Replace 'Artikel' with your actual model name

        return view('writer', compact('artikels'));
    }
}

this is my view in writer.blade.php

<table class="table table-bordered">
        <tr>
            <th>Image</th>
            <th>Judul</th>
            <th>Kategori</th>
            <th>Tag</th>
        </tr>
        @foreach ($artikels as $item)
        <tr>
            <td><img src="/gambar_artikel/" width="100px"></td>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        @endforeach
    </table>

and this is my route

Route::view('/', 'dashboard')->name('dashboard');
Route::view('/AboutMe', 'aboutme')->name('AboutMe');
Route::view('/Writer', 'writer')->name('writer');


Auth::routes();

Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Route::resource('/artikel', \App\Http\Controllers\ArtikelController::class);

how do i fix this problem? Thank you :)

I tried finding a lot of tutorials but it didn't fix my problem



via Chebli Mohamed

samedi 19 août 2023

The GET method is not supported for route api/login. Supported methods: POST. Laravel + react deplo

I got this problem when i deploy Laravel app

The GET method is not supported for route api/login. Supported methods: POST.

but on the route i use the method post

Route::post('/login',[AuthController::class,'login']);



via Chebli Mohamed

vendredi 18 août 2023

How to convert a mailable object to plain text version?

I have an old Laravel 5.7 application.

I have a mailable Illuminate\Mail\Mailable object.

I want to use a 3rd party to send my emails which is not within Laravel's default driver. For the API, I need to send the plain-text and the html-text of the mail.

I can retrieve html text like this:

$htmlText = $mailable->render();

But how to I retrieve the plain text?

This is my build of the mailable:

public function build()
{
    return $this->view('emails.newsletter.master')
                    ->text('emails.newsletter.master_text')
                    ->subject('Hallo');
} 

I could not find how to retrieve plain text from mailable from Laravel docs. I also did not find a method inside the Mailable class that would generate the text. I only see that the plain text blade path gets assigned to textView variable.



via Chebli Mohamed

jeudi 17 août 2023

after changing theme for one Mailable file in laravel it messup other email which dont have $theme variable set

below is my code to change the theme for particular emails where customize mailable is extended.

class TablerMailable extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Instruct to use tabler theme.
     *
     * @var string
     */
    public $theme = 'tabler';

    /**
     * Build the Markdown view for the message.
     *
     * @return array
     */
    protected function buildMarkdownView()
    {
        $markdown = Container::getInstance()->make(Markdown::class);
        $markdown->loadComponentsFrom([resource_path('views/vendor/tabler-mail')]);

        if (isset($this->theme)) {
            $markdown->theme($this->theme);
        }
        
        $data = $this->buildViewData();

        $views= [
            'html' => $markdown->render($this->markdown, $data),
            'text' => $this->buildMarkdownText($markdown, $data),
        ];
        
        return $views;
    }
}

my problem is other emails that don't extend this class also get affected by this change. I don't know how to unset this theme for those emails where the $theme variable is already not set.



via Chebli Mohamed

vendredi 11 août 2023

Unable to communicate with Sanctum - I am getting a 503 error

I have successfully set up Sanctum on Laravel 8. However, when I try to use Postman with the bearer token obtained from the personal_access_tokens table, I encounter the following error message. Could it be the stateful setting? As I am not communicating to the API form the same domain but from Postman and then my real project will be sending data from another window computer to my website. I have been for 4 days on this, I cannot find an answer to the issue.

"I would like to reassure you that the page is not undergoing maintenance(php artisan up)."

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>

<head>
    <title>503 Service Unavailable</title>
</head>

<body>
    <h1>Service Unavailable</h1>
    <p>The server is temporarily unable to service your
        request due to maintenance downtime or capacity
        problems. Please try again later.</p>
</body>

</html>

api.php:

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\V2\Api\KeywordsController;


Route::middleware(['auth:sanctum', 'abilities:db:view,db:update,db:store'])->group(function () {
        Route::get('fetch-keyword', [KeywordsController::class, 'fetchKeyword']);
        Route::put('update-keyword/{keywordName}', [KeywordsController::class, 'updateKeyword']);
});

auth.php:

<?php

return [

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
            'hash' => false,
        ],
    ],


    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

    ],

    'verification' => [
        'expire' => 1440,
    ],


    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 180,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

];

Sanctum.php:

<?php

use Laravel\Sanctum\Sanctum;

return [

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        Sanctum::currentApplicationUrlWithPort()
    ))),


 'guard' => ['api'],

    'expiration' => null,

    'middleware' => [
        'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class,
        'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class,
    ],

];

Traits in the User Model:

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Paddle\Billable;
use Spatie\Permission\Traits\HasRoles;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable implements MustVerifyEmail
{
    use HasApiTokens, HasFactory, Notifiable, Billable, HasRoles;

.....more code not attached

Kernal.php:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    protected $middleware = [
        // \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];


    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            \Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
        'abilities' => \Laravel\Sanctum\Http\Middleware\CheckAbilities::class,
        'ability' => \Laravel\Sanctum\Http\Middleware\CheckForAnyAbility::class,
    ];

}

This is how my token is created:

 public function update(Request $request, $id)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'email' => ['required', Rule::unique('users')->ignore($id)],
            'has_token' => 'nullable|boolean',
            'password' => $request->filled('password') ? 'required|min:8' : '',
            'token_name' => [
                'nullable',
                'string',
                Rule::requiredIf(function () use ($request) {
                    return $request->has_token === 1;
                }),
            ],
        ]);

        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 422);
        }

        try {
            $user = User::find($id);

            if ($request->email !== $user->email) {
                return $this->changeEmail($request->email, $request->password, $id);
            }

            // Update fields
            $user->name = $request->name;
            $user->current_credits = $request->current_credits;

            if ($request->filled('password')) {
                $user->password = Hash::make($request->password);
            }

            $user->save();

            $user = User::where('email', $request->email)->first();
            if ($request->has_token === 1 && $request->filled('token_name')) {
                $user->createToken($request->token_name, ['db:view', 'db:update', 'db:store']);
            } elseif ($request->has_token === 0) {
                $user->tokens()->delete(); 
            }

        } catch (Exception $e) {
            return response()->json(['error' => $e->getMessage()], 500);
        }

        return response()->json(['success' => 'success'], 200);
    }

I can see the token in the database, image attached: https://i.stack.imgur.com/az8vS.png

Thanks in advance!



via Chebli Mohamed