Laravel – CodeWeb https://codeweb.wall-spot.com Code the web easy Wed, 10 Apr 2024 05:11:27 +0000 en-US hourly 1 https://wordpress.org/?v=6.6.1 https://i0.wp.com/codeweb.wall-spot.com/wp-content/uploads/2022/06/code-web.png?fit=32%2C32&ssl=1 Laravel – CodeWeb https://codeweb.wall-spot.com 32 32 214557421 How To Call Social Link In The Loop https://codeweb.wall-spot.com/how-to-call-social-link-in-the-loop/ Wed, 10 Apr 2024 05:11:25 +0000 https://codeweb.wall-spot.com/?p=130 Calling similar tags or input fields in a loop. Let us skip the repeating input text box with a PHP loop in Laravel.

Don’t just paste if you can use the loop

Suppose you have a database table called “socialtables” and it has 5 column names followed by numbers to let the user to select which social media they want to save.

Soc the database structure is like this:

Social profile database
socialtables
             |social_icon_1|
             |social_link_1|
             |social_icon_2|
             |social_link_2|
             |social_icon_3|
             |social_link_3|
             |social_icon_4|
             |social_link_4|
             |social_icon_5|
             |social_link_5|

As you in the above example, socialtables database table has five social profiles to be flooded with social site links and icons. Only the numbers differ. So we have decided to call the numbers using a loop and keep the rest.

Social site data we are going to save

social_icon_1 = [image/icon]

social_linnk_1 = https://fb.com/pagename

How the user interface will look like?

social input loop

We will let the user select the social icons to choose from and then they can enter the site links. Let the admin/your client decide what icons to display.

For this, we will need predefined data to be flooded. For this, you can use a database filled with data or you can use a Laravel controller.

Use the array in the controller

public function sitesettings()
    {
        $socialicons = [
            'facebook' => [
                'icon' => '<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 8 19"><path fill-rule="evenodd" d="M6.135 3H8V0H6.135a4.147 4.147 0 0 0-4.142 4.142V6H0v3h2v9.938h3V9h2.021l.592-3H5V3.591A.6.6 0 0 1 5.592 3h.543Z" clip-rule="evenodd"/></svg>'
            ],
            'discord' => [
                'icon' => '<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 21 16"><path d="M16.942 1.556a16.3 16.3 0 0 0-4.126-1.3 12.04 12.04 0 0 0-.529 1.1 15.175 15.175 0 0 0-4.573 0 11.585 11.585 0 0 0-.535-1.1 16.274 16.274 0 0 0-4.129 1.3A17.392 17.392 0 0 0 .182 13.218a15.785 15.785 0 0 0 4.963 2.521c.41-.564.773-1.16 1.084-1.785a10.63 10.63 0 0 1-1.706-.83c.143-.106.283-.217.418-.33a11.664 11.664 0 0 0 10.118 0c.137.113.277.224.418.33-.544.328-1.116.606-1.71.832a12.52 12.52 0 0 0 1.084 1.785 16.46 16.46 0 0 0 5.064-2.595 17.286 17.286 0 0 0-2.973-11.59ZM6.678 10.813a1.941 1.941 0 0 1-1.8-2.045 1.93 1.93 0 0 1 1.8-2.047 1.919 1.919 0 0 1 1.8 2.047 1.93 1.93 0 0 1-1.8 2.045Zm6.644 0a1.94 1.94 0 0 1-1.8-2.045 1.93 1.93 0 0 1 1.8-2.047 1.918 1.918 0 0 1 1.8 2.047 1.93 1.93 0 0 1-1.8 2.045Z"/></svg>'
            ],
            'twitter' => [
                'icon' => '<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 17"><path fill-rule="evenodd" d="M20 1.892a8.178 8.178 0 0 1-2.355.635 4.074 4.074 0 0 0 1.8-2.235 8.344 8.344 0 0 1-2.605.98A4.13 4.13 0 0 0 13.85 0a4.068 4.068 0 0 0-4.1 4.038 4 4 0 0 0 .105.919A11.705 11.705 0 0 1 1.4.734a4.006 4.006 0 0 0 1.268 5.392 4.165 4.165 0 0 1-1.859-.5v.05A4.057 4.057 0 0 0 4.1 9.635a4.19 4.19 0 0 1-1.856.07 4.108 4.108 0 0 0 3.831 2.807A8.36 8.36 0 0 1 0 14.184 11.732 11.732 0 0 0 6.291 16 11.502 11.502 0 0 0 17.964 4.5c0-.177 0-.35-.012-.523A8.143 8.143 0 0 0 20 1.892Z" clip-rule="evenodd"/></svg>'
            ],
            'github' => [
                'icon' => '<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 .333A9.911 9.911 0 0 0 6.866 19.65c.5.092.678-.215.678-.477 0-.237-.01-1.017-.014-1.845-2.757.6-3.338-1.169-3.338-1.169a2.627 2.627 0 0 0-1.1-1.451c-.9-.615.07-.6.07-.6a2.084 2.084 0 0 1 1.518 1.021 2.11 2.11 0 0 0 2.884.823c.044-.503.268-.973.63-1.325-2.2-.25-4.516-1.1-4.516-4.9A3.832 3.832 0 0 1 4.7 7.068a3.56 3.56 0 0 1 .095-2.623s.832-.266 2.726 1.016a9.409 9.409 0 0 1 4.962 0c1.89-1.282 2.717-1.016 2.717-1.016.366.83.402 1.768.1 2.623a3.827 3.827 0 0 1 1.02 2.659c0 3.807-2.319 4.644-4.525 4.889a2.366 2.366 0 0 1 .673 1.834c0 1.326-.012 2.394-.012 2.72 0 .263.18.572.681.475A9.911 9.911 0 0 0 10 .333Z" clip-rule="evenodd"/></svg>'
            ],
            'dribbble' => [
                'icon' => '<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 20 20"><path fill-rule="evenodd" d="M10 0a10 10 0 1 0 10 10A10.009 10.009 0 0 0 10 0Zm6.613 4.614a8.523 8.523 0 0 1 1.93 5.32 20.094 20.094 0 0 0-5.949-.274c-.059-.149-.122-.292-.184-.441a23.879 23.879 0 0 0-.566-1.239 11.41 11.41 0 0 0 4.769-3.366ZM8 1.707a8.821 8.821 0 0 1 2-.238 8.5 8.5 0 0 1 5.664 2.152 9.608 9.608 0 0 1-4.476 3.087A45.758 45.758 0 0 0 8 1.707ZM1.642 8.262a8.57 8.57 0 0 1 4.73-5.981A53.998 53.998 0 0 1 9.54 7.222a32.078 32.078 0 0 1-7.9 1.04h.002Zm2.01 7.46a8.51 8.51 0 0 1-2.2-5.707v-.262a31.64 31.64 0 0 0 8.777-1.219c.243.477.477.964.692 1.449-.114.032-.227.067-.336.1a13.569 13.569 0 0 0-6.942 5.636l.009.003ZM10 18.556a8.508 8.508 0 0 1-5.243-1.8 11.717 11.717 0 0 1 6.7-5.332.509.509 0 0 1 .055-.02 35.65 35.65 0 0 1 1.819 6.476 8.476 8.476 0 0 1-3.331.676Zm4.772-1.462A37.232 37.232 0 0 0 13.113 11a12.513 12.513 0 0 1 5.321.364 8.56 8.56 0 0 1-3.66 5.73h-.002Z" clip-rule="evenodd"/></svg>'
            ],
            'youtube' => [
                'icon' => '<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-youtube w-4 h-4" viewBox="0 0 16 16"><path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.01 2.01 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.01 2.01 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31 31 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.01 2.01 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A100 100 0 0 1 7.858 2zM6.4 5.209v4.818l4.157-2.408z"/></svg>'
            ],
            'instagram' => [
                'icon' => '<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-instagram w-4 h-4" viewBox="0 0 16 16"><path d="M8 0C5.829 0 5.556.01 4.703.048 3.85.088 3.269.222 2.76.42a3.9 3.9 0 0 0-1.417.923A3.9 3.9 0 0 0 .42 2.76C.222 3.268.087 3.85.048 4.7.01 5.555 0 5.827 0 8.001c0 2.172.01 2.444.048 3.297.04.852.174 1.433.372 1.942.205.526.478.972.923 1.417.444.445.89.719 1.416.923.51.198 1.09.333 1.942.372C5.555 15.99 5.827 16 8 16s2.444-.01 3.298-.048c.851-.04 1.434-.174 1.943-.372a3.9 3.9 0 0 0 1.416-.923c.445-.445.718-.891.923-1.417.197-.509.332-1.09.372-1.942C15.99 10.445 16 10.173 16 8s-.01-2.445-.048-3.299c-.04-.851-.175-1.433-.372-1.941a3.9 3.9 0 0 0-.923-1.417A3.9 3.9 0 0 0 13.24.42c-.51-.198-1.092-.333-1.943-.372C10.443.01 10.172 0 7.998 0zm-.717 1.442h.718c2.136 0 2.389.007 3.232.046.78.035 1.204.166 1.486.275.373.145.64.319.92.599s.453.546.598.92c.11.281.24.705.275 1.485.039.843.047 1.096.047 3.231s-.008 2.389-.047 3.232c-.035.78-.166 1.203-.275 1.485a2.5 2.5 0 0 1-.599.919c-.28.28-.546.453-.92.598-.28.11-.704.24-1.485.276-.843.038-1.096.047-3.232.047s-2.39-.009-3.233-.047c-.78-.036-1.203-.166-1.485-.276a2.5 2.5 0 0 1-.92-.598 2.5 2.5 0 0 1-.6-.92c-.109-.281-.24-.705-.275-1.485-.038-.843-.046-1.096-.046-3.233s.008-2.388.046-3.231c.036-.78.166-1.204.276-1.486.145-.373.319-.64.599-.92s.546-.453.92-.598c.282-.11.705-.24 1.485-.276.738-.034 1.024-.044 2.515-.045zm4.988 1.328a.96.96 0 1 0 0 1.92.96.96 0 0 0 0-1.92m-4.27 1.122a4.109 4.109 0 1 0 0 8.217 4.109 4.109 0 0 0 0-8.217m0 1.441a2.667 2.667 0 1 1 0 5.334 2.667 2.667 0 0 1 0-5.334"/></svg>'
            ],
        ];
        
        $socialtables = Socialtable::first();
        return view('admin.settings', compact('socialtables', 'socialicons'));
    }

In the above <svg ...></svg> is svg icon we are using to choose from the same will appear in the footer area. You can use predefined images. For SVG icons visit Bootstrap icons or Heroicons.

The structure is pretty simple: One variable has an array and each of them has one or two variables stored in it. So it in short looks like this:

$socialicons = [
     'facebook' => [
                'icon' => '<svg...></svg>'
                   ],
];

Laravel blade file to 5 loops of the same input box

Now the Laravel blade file is named settings and it is inside the admin folder, so it looks like admin.settings.

Now place this code that will show five main loops with a dropdown selection and input text box.

@for ($count = 1; $count <= 5; $count++)
                <div class="space-y-5 space-x-4">
                    <select name="social_icon_{{$count}}" id="" class="dark:bg-gray-700 rounded-md">
                        @foreach ($socialicons as $platform => $data)
                            <option value='{!! $data['icon'] !!}' class="text-gray-400" {{ $data['icon'] == $admin->{'social_icon_'.$count} ? 'selected' : '' }}>{{ ucfirst($platform) }}</option>
                        @endforeach
                    </select>
                    <input type="text" name="social_link_{{$count}}" id="" value="{{ $admin->{'social_link_' . $count} }}" class="dark:bg-gray-700 rounded-md">
                </div>
            @endfor

You see, we have used one select tag and one input tag for five text fields.

In the above code, we have used a double exclamation mark !! with single curly brackets {!! $var !!}. This means to run the code stored in the variable. Because we are using svg icons in HTML format that need to be executed.

Main parts in the above code

  • For loop to count and store numbers in $count.
  • Calling social_icon_{{$count}} and social_link_{{$count}} respectively.
  • Foreach loop to get the social icons from the controller we stored in an array $socialicons. Here we can call platforms for the site name we defined and data to call the icons.
]]>
130
Livewire Error Fix: “Cannot assign null to property $name” https://codeweb.wall-spot.com/livewire-error-fix-cannot-assign-null-to-property-name/ Wed, 03 Apr 2024 05:49:26 +0000 https://codeweb.wall-spot.com/?p=126 Resolving Null Value Assignment in Livewire Components

Troubleshooting “Cannot assign null to property $name”

What is actually the error?

Laravel 10 with the breeze and livewire project. When customizing the user profile area with adding extra fields like a unique username and about the field.

Cannot assign null to property Livewire\Volt\Component@anonymous::$name of type string

An error appears for the update-profile-information-form.blade.php file, in the mount function.

public function mount(): void
    {
        $this->name = Auth::user()->name;
        $this->email = Auth::user()->email;
    }

Above the name field is empty but we are using it. How do we make it nullable?

Solution

You just need to make the default value to show if there is a null field in the database.

public function mount(): void
    {
        $this->name = Auth::user()->name ?? '';
        $this->email = Auth::user()->email ?? '';
    }

Or make it more cleaner:

public function mount(): void
    { 
        $user = Auth::user();
        $this->name = $user->name ?? '';
        $this->email = $user->email ?? '';
    }
]]>
126
Seeding Inside Migration File https://codeweb.wall-spot.com/seeding-inside-migration-file/ Sat, 27 Jan 2024 10:03:58 +0000 https://codeweb.wall-spot.com/?p=121 In Laravel, you can seed your database with data using seed classes. All seed classes are stored in the database/seeders directory. By default, a DatabaseSeeder class is defined for you.

Here we are talking about the initial data seeding along with the migration file. So you will get the first data just after migrating the database file.

public function up()
{
    Schema::create('table_name', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->timestamps();
    });

    DB::table('table_name')->insert([
        'name' => 'John Doe',
        'short' => 'Short intro goes here...',
        'description' => 'All the details goes here...',
    ]);
}

In the above example, the up the method creates a table named table_name with columns idname, and timestamps. After creating the table, it inserts three rows of data into the table using the insert method of the DB facade.

]]>
121
How To Show Checkbox Value Checked https://codeweb.wall-spot.com/how-to-show-checkbox-value-checked/ Sat, 20 Jan 2024 06:56:04 +0000 https://codeweb.wall-spot.com/?p=117 In this post, we will work on checkbox status while updating the post. This example is very similar to other if-else statements.

Your table column will be false by default. It will store 0 in the database if not checked.

$table->boolean('visible')->default(false);

For the entry form it will be something like this:

<input type="checkbox" name="visible" value="1">

Show checkbox checked

Now the main part here is to show checked when updating if there is a true value store that is 1 and not to show checked if there is a false value that is 0.

Example 1

Simple Laravel checkbox selected with the ternary operator

<input type="checkbox" name="visible" value="1" {{ $page->visible ? 'checked' : '' }}>

Laravel checkbox selected with the ternary operator and compare boolean values.

<input type="checkbox" name="visible" value="1" {{ $page->visible==1 ? 'checked' : '' }}>

Another way to check the same thing is with the true or false values we have used above for boolean values.

<input type="checkbox" name="visible" value="1" {{ $page->visible==true ? 'checked' : '' }}>

Example 2

There are other ways to do the same. You can always use the if-else statement to show if something is true or false. If-else statement will be messy and why not use the better few lines to complete the long path?

We can use the same statement within the input tag. Select the checkbox with the @if blade directives.

<input type="checkbox" name="visible" value="1" @if ($page->visible) checked @endif>

The thing with a shorter version by @checked blade directives.

<input type="checkbox" name="visible" value="1" @checked ($page->visible)>
]]>
117
Dynamic Page Reordering with Laravel Livewire and Up/Down Arrows https://codeweb.wall-spot.com/dynamic-page-reordering-with-laravel-livewire-and-up-down-arrows/ Thu, 18 Jan 2024 06:19:36 +0000 https://codeweb.wall-spot.com/?p=114 Dynamic Page Reordering with Laravel Livewire and Up/Down Arrows.

Enhance the visual appeal and organization of your website by incorporating a neatly arranged list/page/menu in the footer area. You have the option to display it in alphabetical order or based on unique identifiers. Strategically placing vital links at the top can captivate user attention, while the rest gracefully follow below. This practice is particularly beneficial when working on expansive projects, as it ensures that key links are showcased prominently and arranged in a meaningful order, contributing to a more engaging and user-friendly experience.

Reordering the list using Laravel Livewire

Here we are not using any Laravel packages for changing the position of the list. Just the arrows to move one step up or down to rearrange the position.

If you like to use the packages get any of them:

For this example, we are using the page model. So you have to add the position column in the page table. $table->unsignedInteger() because we do not want the negative numbers to be stored.

/**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('pages', function (Blueprint $table) {
            $table->id();
            $table->unsignedInteger('position')->nullable();
            $table->string('title');
            $table->text('description');

            $table->timestamps();
        });
    }

Make Livewire component: php artisan make:livewire page-list

Implement the logic:

// app/Http/Livewire/PageList.php

class PageList extends Component
{
    public $pages = [];

    public function mount()
    {
        $this->pages = Page::orderBy('position')->get();
    }

    public function moveUp($pageId)
    {
        $page = Page::find($pageId);
        $previousPage = Page::where('position', '<', $page->position)->orderBy('position', 'desc')->first();

        if ($previousPage) {
            $tempPosition = $page->position;
            $page->position = $previousPage->position;
            $previousPage->position = $tempPosition;
            $page->save();
            $previousPage->save();
            $this->pages = Page::orderBy('position')->get();
        }
    }

    public function moveDown($pageId)
    {
        $page = Page::find($pageId);
        $previousPage = Page::where('position', '>', $page->position)->orderBy('position', 'asc')->first();

        if ($previousPage) {
            $tempPosition = $page->position;
            $page->position = $previousPage->position;
            $previousPage->position = $tempPosition;
            $page->save();
            $previousPage->save();
            $this->pages = Page::orderBy('position')->get();
        }
    }

    public function render()
    {
        return view('livewire.page-list');
    }
}

Create the blade view:

<table>
    <thead>
        <tr>
            <th>Title</th>
            <th>Position</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach ($pages as $page)
            <tr>
                <td>{{ $page->title }}</td>
                <td>{{ $page->position }}</td>
                <td>
                    @if ($page->position > 1)
                      <button wire:click="moveUp({{ $page->id }})">↑</button>
                    @endif
                    @if ($page->position < $pages->max('position'))
                      <button wire:click="moveDown({{ $page->id }})">↓</button>
                    @endif
                </td>
            </tr>
        @endforeach
    </tbody>
</table>

Include the component in your view:

// In your main view or layout

<div>
    @livewire('page-list')
</div>
]]>
114
Creating Search Function https://codeweb.wall-spot.com/creating-search-function/ Wed, 20 Dec 2023 15:27:26 +0000 https://codeweb.wall-spot.com/?p=109 This is how you can use the search function used in the Laravel project.

Search the post and show all the results that match its title or description.

public function search(Request $request)
    {
        $this->validate($request, [
            'q' => 'required',
        ]);
        $posts = Post::where('title', 'like', '%' . $request->q . '%')->orWhere('description', 'like', '%' . $request->q . '%')->paginate(20);
    
        return view('pages.search', compact('posts'))->with('i', (request()->input('page', 1) - 1) * 20);
    }
]]>
109
How To Delete Old File While Uploading New https://codeweb.wall-spot.com/how-to-delete-old-file-while-uploading-new/ Fri, 15 Dec 2023 15:28:38 +0000 https://codeweb.wall-spot.com/?p=105 How to delete older file/image when you update the post?

To make the folder clean and remove all unused file/image from the folder, delete old files.

A Step-by-Step Guide to Updating Posts and Cleaning Up Images in Laravel

Learn How to Update Your Posts and Delete Unused Images in Laravel.

As your website grows and you create more and more blog posts, you might face some challenges in managing your content and images.

For example, you might want to update your old posts with new information or images, but you don’t want to leave behind the old images that are no longer relevant or used. These unused images can take up valuable space in your server and affect your website performance and loading speed.

Solution: Laravel provides us with a great solution to keep our blog folder clean and gives us the control to manage all the unnecessary files. When we update our old posts, we can check and delete the old files if we upload new ones.

So, we will create a function where we will check if the post has an image already. Then the next actions will depend on it.

  • Check if the post has an image
  • If yes, then delete and upload a new one (if the user wants)
  • If no, then upload a new image (if the user wants)
  • The field could be left empty as per the user’s requirement

Check if the file exists

Let’s see the code to check if there is already a file available in the folder.

        if ($request->hasFile('image')) {
            $oldfile = public_path('images/post_img/') . $post->image;
            $filename = 'image' . '_' .time() . '.' . $request->file('image')->getClientOriginalExtension();
            if(File::exists($oldfile)){
                File::delete($oldfile);
            }

We store the file path and the file name in a variable called $oldfile. This will make it easy to use the long file path if we need it for heavy actions.

Basically what the above code means: We check if the user is uploading a file. If yes, then we name it and then check if there is already a file exists. Here again, if the condition is yes, we will delete it and then update it with $post->update();

  • If the request has a file, change its name, and store it in a variable called $filename
  • If there is already a file (old file), remove it if(File::exists($oldfile)){File::delete($olderfile);}

Function for deleting old image and updating with new image

use File;

public function update(Request $request, Post $post)
    {
        $validatedData = $this->validate($request, [
            'title' => 'required',
            'category_id' => 'required',
            'description' => 'required',
            'image' => 'sometimes|mimes:jpeg,jpg,gif,png'
        ]);

        if ($request->hasFile('image')) {
            $oldfile = public_path('images/post_img/') . $post->image;
            $filename = 'image' . '_' .time() . '.' . $request->file('image')->getClientOriginalExtension();
            if(File::exists($oldfile)){
                File::delete($oldfile);
            }

            $request->file('image')->storeAs('post_img', $filename, 'public');

            $validatedData['image'] = $filename;
        }


    
        $post->update($validatedData);

        return redirect()->back()->withMessage('Your updated post is ready now!');
    }
]]>
105
Email Validation And Message In Laravel https://codeweb.wall-spot.com/email-validation-and-message-in-laravel/ Mon, 04 Sep 2023 06:47:26 +0000 https://codeweb.wall-spot.com/?p=102 //email validation and message //controller file public function store(Request $request) { $this->validation($request, ['email'=>'required|email']); } //Now on view page @if($error->any()) @foreach($error->all() as $error) <li>{{ $error }}</li> @endforeach @endif ]]> 102 Laravel Route To Open Pages https://codeweb.wall-spot.com/laravel-route-to-open-pages/ Mon, 04 Sep 2023 06:39:54 +0000 https://codeweb.wall-spot.com/?p=100 Laravel function to open pages is simple. A demo function you will find on web.php for welcome page.

Simply you can copy paste the same to open any other pages.

        //Opens welcome blade page
	Route::get('/', function () {
	return view('welcome');
	});
	
	//Opens pages/about page
	Route::get('/about', function(){
		return view('pages.about');
	});
	
	//Opens custom pages
	Route::get('/users/{id}', function($id){
		return 'This is user '.$id;
	});
]]>
100
http://localhost/livewire/livewire.js was not found on this server https://codeweb.wall-spot.com/http-localhost-livewire-livewire-js-was-not-found-on-this-server/ Mon, 13 Feb 2023 10:32:53 +0000 https://codeweb.wall-spot.com/?p=97 You just installed livewire to your existing laravel project. And came to net::ERR_ABORTED 404 (Not Found) message.

Or by you came to know the …livewire/livewire.js file is missing by inspecting.

Livewire does not work try basic steps.

What actually happened?

You did not complete the full installation steps instructed in the official document here.

Publish frontend assets by php artisan:livewire --assets

]]>
97