Tampilkan postingan dengan label laravel. Tampilkan semua postingan
Tampilkan postingan dengan label laravel. Tampilkan semua postingan

Livewire Error The Command PDF To text Upload file / Library ini adalah wrapper PHP untuk binary pdftotext dari Poppler, berfungsi untuk mengubah file PDF menjadi teks secara akurat dan cepat.

 


📌 Upload PDF dan Konversi ke Teks di Laravel Livewire

1️⃣ Install library


composer require spatie/pdf-to-text

Install pdftotext di server:

    Ubuntu/Debian:


sudo apt-get install poppler-utils

CentOS:


sudo yum install poppler-utils

macOS:


    brew install poppler

2️⃣ Buat Livewire Component


php artisan make:livewire UploadPdfText

3️⃣ Edit UploadPdfText.php

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithFileUploads;
use Spatie\PdfToText\Pdf;

class UploadPdfText extends Component
{
    use WithFileUploads;

    public $file;
    public $parsedText;

    public function parsePdf()
    {
        $this->validate([
            'file' => 'required|file|mimes:pdf|max:20480', // Max 20MB
        ]);

        $path = $this->file->getRealPath();
        $text = Pdf::getText($path);

        $this->parsedText = $text;
    }

    public function render()
    {
        return view('livewire.upload-pdf-text');
    }
}

4️⃣ Buat upload-pdf-text.blade.php


<div class="p-6 bg-white border rounded shadow">
    <h2 class="text-lg font-semibold mb-4">Upload PDF dan Konversi ke Teks</h2>

    <input type="file" wire:model="file" accept="application/pdf" class="mb-2">
    <div wire:loading wire:target="file">Mengupload...</div>

    <button wire:click="parsePdf"
        class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">Proses PDF</button>

    @if ($parsedText)
        <div class="mt-4">
            <h3 class="font-semibold mb-2">Hasil Teks:</h3>
            <pre class="p-2 bg-gray-100 rounded max-h-[400px] overflow-auto text-sm">{{ $parsedText }}</pre>
        </div>
    @endif
</div>

5️⃣ Tambahkan ke Route atau Blade


Di halaman Blade:

@livewire('upload-pdf-text')

Atau route untuk testing:

Route::get('/upload-pdf', function () {
    return view('pdf-upload-page'); // berisi @livewire di atas
});

✅ Hasil


🔹 User upload file PDF.
🔹 Tekan tombol Proses PDF.
🔹 Teks dari PDF akan ditampilkan di layar, siap untuk di-copy atau disimpan ke DB.

JIKA TERJADI ERROR DAN BERMASALAH DENGAN /usr/bin/pdftotext

 Direkomendasikan: Gunakan Wrapper Script

Buat shell script kecil untuk membungkus pdftotext dengan LD_LIBRARY_PATH kosong, lalu arahkan Spatie ke script ini.
📁 Langkah-langkah:
1. Buat file /usr/local/bin/pdftotext-wrapper

Isi file dengan:

#!/bin/bash
LD_LIBRARY_PATH= /usr/bin/pdftotext "$@"

2. Jadikan script bisa dieksekusi:

chmod +x /usr/local/bin/pdftotext-wrapper

3. Ubah kode PHP:

use Spatie\PdfToText\Pdf;

$text = Pdf::getText('/path/to/file.pdf', '/usr/local/bin/pdftotext-wrapper');

🔚 Kesimpulan:

    LD_LIBRARY_PATH harus dikosongkan, jadi gunakan LD_LIBRARY_PATH=

    Tapi karena Pdf::getText() tidak mendukung parameter ketiga, kamu tidak bisa langsung menyetel env di situ

    Solusi paling bersih: Gunakan wrapper script yang menyetel env kosong, lalu arahkan Pdf::getText() ke script itu 






Laravel HTTPS routes

Ringkasan ini tidak tersedia. Harap klik di sini untuk melihat postingan.

Add Public to asset path in Laravel

 I want to install laravel in shared hosting and I followed the steps here https://stackoverflow.com/a/28449523 but my asset path doesn't include the public directory

Instead of this

<link href='http://example.com/public/assets/css/style.css' type='text/css' media='all' />

I'm getting this

<link href='http://example.com/assets/css/style.css' type='text/css' media='all' />

How do I change the directory of the asset folder(add public to assets) without changing any core classes?


Add ASSET_URL=public in your .env file and run php artisan config:cache

How to sortBy and paginate from Json Table

 

// 1 here we will create collection from querybuilder using get methode
// 2 we will use sortBy or sortByDesc methode for ordering the collection
// 3 crete manual paginator 
 
$myQueryPagination = $query->get()
->sortByDesc(
function ($mySortByJson) {
$myQueryPagination = isset(json_decode($mySortByJson->datadaftarpolirj_json, true)['eresep']) ? 1 : 0;
return ($myQueryPagination . $mySortByJson->rj_date1);
}
);


$myQueryPagination = $this->paginate($myQueryPagination, $this->limitPerPage);
 
 

create manual paginator

Remove “api” Prefix from URL on Laravel

 PHP Laravel Framework makes it easy for us to create a Restful API. We just set the routing in the Routes -> api.php section.

By default we will find that we will be given a url like this http://ourdomain.com/api/[end-point]

This is to distinguish between urls that can be accessed via the web or can only be accessed through api. We want to change it to http://ourdomain.com/[end-point] by removing the “api” prefix.

To change it we just go to the RouteServiceProvider.php file in the app/Providers folder

Then in the mapApiRoutes method function section, we can eliminate the prefix (‘api’)

protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

So that the function becomes as follows

protected function mapApiRoutes()
    {
        Route::middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

If we have changed it, then we can access our API with the URL http://ourdomain.com/[end-point]

Looping Laravel multiple connect insert and Update

 

// dd('x');
//get table oracle local
DB::connection('oracle')->table('RSMST_DESAS')->select('des_id', 'des_name', 'kec_id', 'st_desa')->get()
->each(
function ($item) {

// dd($item);
//cek record oracle RS // if exist update else insert
$cekrec = DB::connection('oraclers')
->table('RSMST_DESAS')->where('des_id', $item->des_id)
->first();

if ($cekrec) {
// update
DB::connection('oraclers')->table('RSMST_DESAS')
->where('des_id', $item->des_id)
->update([
'des_id' => $item->des_id,
'des_name' => $item->des_name,
'kec_id' => $item->kec_id,
'st_desc' => $item->st_desa,
]);
} else {
// insert
DB::connection('oraclers')->table('RSMST_DESAS')
->insert([
'des_id' => $item->des_id,
'des_name' => $item->des_name,
'kec_id' => $item->kec_id,
'st_desc' => $item->st_desa,



]);
}
}
);


Select-ing Scalar Values | Running SQL Queries on Laravel

Sometimes your database query may result in a single, scalar value. Instead of being required to retrieve the query's scalar result from a record object, Laravel allows you to retrieve this value directly using the scalar method:

$burgers = DB::scalar(
    "select count(case when food = 'burger' then 1 end) as burgers from menu"
);



https://laravel.com/docs/10.x/database

Live Wire how to trigger emit when validate fails in livewire

 

Basicly, You don't have to check for if ($validator->fails()) livewire does that for you.

If validation fails, a standard ValidationException is thrown (and caught by Livewire), and the standard $errors object is available inside the component's view.

 In order to hook into the validation in "real-time" with Livewire, you need to catch that exception. To get the real-time validation with @error('fieldName'), you should also re-throw the exception once you are done.

 

in my case i need to send emit ('error message') when  $validator->fails()

and now this is the code

 

// Proses Validasi///////////////////////////////////////////
try {
$this->validate($rules, $messages);
} catch (\Illuminate\Validation\ValidationException $e) {

// dd($validator->fails());
$this->emit('toastr-error', "Lakukan Pengecekan kembali Input Data Pasien.");
$this->validate($rules, $messages);
}

 

How to convert date format from dd/mm/yyyy to yyyy-mm-dd using carbon on Laravel

 

You can try this:

Carbon::createFromFormat('d/m/Y', $request->stockupdate)->format('Y-m-d')


https://stackoverflow.com/questions/55950681/how-to-convert-date-format-from-dd-mm-yyyy-to-yyyy-mm-dd-using-carbon-on-laravel

Catching cURL errors with PHP/Laravel

catching cURL errors with PHP/Laravel

cURL error 6: Could not resolve host laravel

Now this is cool and all, but I don't actually want it to return a cURL error and stop my program. 


I'd prefer something like this:


if (guzzle client timed out) {
    do this
} else {
    do that
}



/




Use the inbuilt Laravel Exception class.


Solution:

<?php

namespace App\Http\Controllers;

use Exception;

class MyController extends Controller
{
    public function index()
    {
        try
        {
            $crawler = $goutteClient->request('GET', 'https://www.google.com');
        }
        catch(Exception $e)
        {
            logger()->error('Goutte client error ' . $e->getMessage());
        }

    }
}

 

source : https://stackoverflow.com/questions/57579993/catching-curl-errors-with-php-laravel

Laravel How to validate your parameter List

public function listTurns($doctor_id, $limit, $offset)
{
    $r = [
        'doctor_id' => $doctor_id,
        'limit' => $limit,
        'offset' => $offset,
    ];

    $validator = Validator::make($r, [
        'doctor_id' => 'required|numeric|min:1|exists:doctors,id',
        'limit' => 'required|numeric|min:1',
        'offset' => 'required|numeric|min:0',
    ]);
}

 

 https://stackoverflow.com/questions/29578153/how-to-validate-route-parameters-in-laravel-5

Laravel Custom Validation Language Lines (Laravel Custom errors message



    "accepted"             => "The :attribute must be accepted.",
    "active_url"           => "The :attribute is not a valid URL.",
    "after"                => "The :attribute must be a date after :date.",
    "alpha"                => "The :attribute may only contain letters.",
    "alpha_dash"           => "The :attribute may only contain letters, numbers, and dashes.",
    "alpha_num"            => "The :attribute may only contain letters and numbers.",
    "array"                => "The :attribute must be an array.",
    "before"               => "The :attribute must be a date before :date.",
    "between"              => [
        "numeric" => "The :attribute must be between :min and :max.",
        "file"    => "The :attribute must be between :min and :max kilobytes.",
        "string"  => "The :attribute must be between :min and :max characters.",
        "array"   => "The :attribute must have between :min and :max items.",
    ],
    "boolean"              => "The :attribute field must be true or false.",
    "confirmed"            => "The :attribute confirmation does not match.",
    "date"                 => "The :attribute is not a valid date.",
    "date_format"          => "The :attribute does not match the format :format.",
    "different"            => "The :attribute and :other must be different.",
    "digits"               => "The :attribute must be :digits digits.",
    "digits_between"       => "The :attribute must be between :min and :max digits.",
    "email"                => "The :attribute must be a valid email address.",
    "filled"               => "The :attribute field is required.",
    "exists"               => "The selected :attribute is invalid.",
    "image"                => "The :attribute must be an image.",
    "in"                   => "The selected :attribute is invalid.",
    "integer"              => "The :attribute must be an integer.",
    "ip"                   => "The :attribute must be a valid IP address.",
    "max"                  => [
        "numeric" => "The :attribute may not be greater than :max.",
        "file"    => "The :attribute may not be greater than :max kilobytes.",
        "string"  => "The :attribute may not be greater than :max characters.",
        "array"   => "The :attribute may not have more than :max items.",
    ],
    "mimes"                => "The :attribute must be a file of type: :values.",
    "min"                  => [
        "numeric" => "The :attribute must be at least :min.",
        "file"    => "The :attribute must be at least :min kilobytes.",
        "string"  => "The :attribute must be at least :min characters.",
        "array"   => "The :attribute must have at least :min items.",
    ],
    "not_in"               => "The selected :attribute is invalid.",
    "numeric"              => "The :attribute must be a number.",
    "regex"                => "The :attribute format is invalid.",
    "required"             => "The :attribute field is required.",
    "required_if"          => "The :attribute field is required when :other is :value.",
    "required_with"        => "The :attribute field is required when :values is present.",
    "required_with_all"    => "The :attribute field is required when :values is present.",
    "required_without"     => "The :attribute field is required when :values is not present.",
    "required_without_all" => "The :attribute field is required when none of :values are present.",
    "same"                 => "The :attribute and :other must match.",
    "size"                 => [
        "numeric" => "The :attribute must be :size.",
        "file"    => "The :attribute must be :size kilobytes.",
        "string"  => "The :attribute must be :size characters.",
        "array"   => "The :attribute must contain :size items.",
    ],
    "unique"               => "The :attribute has already been taken.",
    "url"                  => "The :attribute format is invalid.",
    "timezone"             => "The :attribute must be a valid zone.",
 

 

source : https://github.com/laracasts/Email-Verification-In-Laravel/blob/master/resources/lang/en/validation.php

Laravel How to filter Collection Like Query Builder

we know that FIlter in laravel does not support like

but sometimes we need to read array by name and filtering like '%typeing%' query builder

 

when we use like on filter it return null because  FIlter in laravel does not support like 

 

then here it's use this script for filtering data look like name

collect($array)->filter(function ($item) use ($search) 

{

return false !== stristr($item['your desc or name'], $search);  

});


Laravel Multiple Database Connections

1. config/database.php

 'mysql1' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

        'mysql2' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST_2', '127.0.0.1'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'forge'),
            'username' => env('DB_USERNAME_2', 'forge'),
            'password' => env('DB_PASSWORD_2', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

 

 

2. .env

 

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_multiple_database1
DB_USERNAME=root
DB_PASSWORD=

DB_CONNECTION_2=mysql
DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=laravel_multiple_database2
DB_USERNAME_2=root
DB_PASSWORD_2=

 3. connection setting

$table1 = DB::connection('mysql1')->table('desa')->get()
->each(function ($item) {
DB::table('desa')->insert([
'id_desa' => $item->id_desa,
'id_prov' => $item->id_prov,
'id_kab' => $item->id_kab,
'id_kec' => $item->id_kec,
'nm_desa' => $item->nm_desa,
'st_desa' => $item->st_desa,

]);
});

 

$table2 = DB::connection('mysql2')->table('desa')->get()
->each(function ($item) {
DB::table('desa')->insert([
'id_desa' => $item->id_desa,
'id_prov' => $item->id_prov,
'id_kab' => $item->id_kab,
'id_kec' => $item->id_kec,
'nm_desa' => $item->nm_desa,
'st_desa' => $item->st_desa,

]);
});

 in this case i wanna insert all table (looping using each method) data from mysql to oracle database using mysql1 and mysql2 connection by default oracle database connection

https://codelapan.com/post/how-to-use-multiple-database-connections-in-laravel-8

Laravel ajax url not working on production server

 https://stackoverflow.com/questions/56417564/laravel-ajax-not-working-in-production-mode-the-requested-url-appointment-45

Laravel Vite Deploying to Host

     <!--@vite(['resources/css/app.css', 'resources/js/app.js'])-->

Worked for me

        <link href="{{ asset('build/assets/app-3cbe0a94.css') }}" rel="stylesheet">
        <script src="{{ asset('build/assets/app-c47d7316.js') }}" defer></script>

https://stackoverflow.com/questions/72437488/uncaught-typeerror-is-undefined

Laravel dynamic page title in navbar-brand

 <html>
<head>
    <title>App Name - @yield('title')</title>
</head>
<body>
    @section('sidebar')
        This is the master sidebar.
    @show

    <div class="container">
        @yield('content')
    </div>
</body>


then your page title can be changed in your blade page like below

@extends('layouts.master')

@section('title', 'Page Title')

@section('sidebar')
@parent

<p>This is appended to the master sidebar.</p>
@endsection

@section('content')
<p>This is my body content.</p>
@endsection


source : https://stackoverflow.com/questions/34497428/laravel-dynamic-page-title-in-navbar-brand

Laravel loop acces variable from inside $collection->each() loop [duplicate]

 

You can pass data inside the closure by use(). Try this:

$spot = Spot::where('slug', $slug)->first()->load('features.group');

$test = collect();

$spot->features->each(function ($item, $key) use(&$test) {
    $current = collect([
        $item->group->name => $item->name,
    ]);
    $test->mergeRecursive($current);
});
    
dd($test);

or

in this case i make array from collection

$labels = [];
$calonFormatur
->each(function ($item, $key) use (&$labels) {
$labels[] = $item->no_urut . '. ' . $item->nama;
})
->toArray();
dd($labels); 




Passing (laravel) Array in Javascript

 

var app = @json($array);



you can use json_encode()


var array = {{ json_encode($theArray) }};


or parse the json string using JSON.parse()


var array = JSON.parse('{{ json_encode($theArray) }}');

 

Sometimes you may pass an array to your view with the intention of rendering it as JSON in order to initialize a JavaScript variable. For example:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>
 

Sometimes you may pass an array to your view with the intention of rendering it as JSON in order to initialize a JavaScript variable. For example:

<script>
    var app = <?php echo json_encode($array); ?>;
</script>
However, instead of manually calling json_encode, you may use the @json Blade directive. The @json directive accepts the same arguments as PHP's json_encode function:

<script>
    var app = @json($array);

    var app = @json($array, JSON_PRETTY_PRINT);
</script>



The @json directive is also useful for seeding Vue components or data-* attributes:

<example-component :some-prop='@json($array)'></example-component>
 

https://laravel.com/docs/5.8/blade#blade-and-javascript-frameworks

https://stackoverflow.com/questions/33326699/passing-laravel-array-in-javascript