4

我正在学习如何使用 livewire 和 laravel,我试图通过输入绑定一些数据,我编写了这段代码:

home.blade.php:

<html>
<head>
    <title>Home</title>

    @livewireStyles
</head>
<body>
    @livewire("hello-world")

    @livewireScripts
</body>
</html>

你好-world.blade.php:

<div>
    <input wire:model="nome" type="text">
    <br>
    Hello {{ $nome }}
</div>

HelloWorld.php:

<?php

namespace App\Http\Livewire;

use Livewire\Component;

class HelloWorld extends Component
{
    public $nome = 'Name';
    public function render()
    {
        return view('livewire.hello-world');
    }
}

它在 Apache 2.4 上运行但是如果我在加载页面时打开浏览器控制台,我会得到:

(索引):29 GET http://localhost/livewire/livewire.js?id=c1db26b321e994f87254 net::ERR_ABORTED 404(未找到)

(index):35 Uncaught ReferenceError: Livewire is not defined at (index):35

我正在关注官方文档和截屏视频,我尝试逐步按照所有说明进行操作,但它也不起作用。也许我在安装过程中做错了什么,但我不这么认为,因为我刚刚打了:

作曲家需要 livewire/livewire

所以应该没问题。有什么线索吗?

GitHub 仓库:learningLaravel

4

11 回答 11

10

你可以试试这个:

跑:php artisan livewire:publish

然后打开config/livewire.php 更改'asset_url' => null'asset_url' => 'http://localhost'

于 2020-11-02T16:15:56.027 回答
4

就我而言,wepe 评论的内容有效,只是'asset_url' => 'http://localhost'我没有放'asset_url' => url('/')

于 2021-02-07T15:34:23.320 回答
3

虽然 Zenabus.dev 的答案现在在 Livewire 文档中列为最佳实践,但我认为这只是一种解决方法,并不清楚为什么需要这样做,所以我想我会详细说明一下并描述一下404 的常见原因可能是您有哪些其他选择。

默认情况下,Livewire 为 livewire/livewire.js 注册一个路由,并要求对该 URL 的请求通过 Laravel 路由。LivewireJavaScriptAssets 控制器然后将从供应商目录中提取文件并将其提供给用户。

如果在开发系统上一切正常并且像我一样停止在生产中工作,那么您的服务器/虚拟主机配置(Apache,Nginx,...)可能有一个用于 Javascript 文件的特殊处理集,这会干扰这个过程并将尝试直接从您的文档根目录提供这些文件,有效地绕过 Laravel。

请检查您的服务器配置并确保www.yourapp.com/livewire/livewire.js实际上是通过 Laravel 路由的(通过 public/index.php 文件)。

如果不是,您可以删除对 j​​s 文件的任何特殊处理,确保仅在文件实际存在时应用规则,或者如果您不能这样做,您可以按照https://laravel中的描述发布资产-livewire.com/docs/2.x/installation#publish-assets

作为一个侧节点,我个人不会按照文档中的描述在 post-autoload-dump 上添加发布命令,而是在 post-update-cmd 上添加。我对在生产服务器上发布的资产不满意,宁愿只在需要时在开发系统上执行此操作,然后将公共文件推送到存储库。

于 2020-10-20T23:33:10.123 回答
3

深入研究并找到解决方案 您的请求网址,您可以从您的网络选项卡中查看

获取 http://localhost/livewire/livewire.js 网络::ERR_ABORTED

  1. 你的基本网址

获取 http://localhost/

它应该是

获取 http://localhost/your_project_directory

  1. 现在正确的网址

获取 http://localhost/your_project_directory/livewire/livewire.js

或者

获取 http://localhost/your_project_directory/public/livewire/livewire.js

解决方案:

应用程序/配置/livewire.php

'asset_url' => env('APP_URL', 'http://localhost'),

也在 .env 文件中相应地更新 APP_URL

您应该清除缓存配置 然后尝试我希望这将解决问题

于 2021-02-16T14:04:04.353 回答
3

我正在经历同样的挑战......请这样做来解决你的问题。跑

php artisan livewire:publish

打开config/livewire.php 编辑行

'asset_url' => 空

, 读书

'asset_url' => 'http://localhost/your_project/public/',

运行工匠命令以清除缓存,然后进行测试。如果您使用的是 Linux,则可以从此处复制。

php artisan cache:clear;php artisan config:clear;php artisan route:clear;php artisan view:clear;

享受编码!

于 2021-07-24T21:29:49.237 回答
2

以下命令会将资产发布到您的public文件夹,并应解决 404 问题。

php artisan vendor:publish --force --tag=livewire:assets

@livewireScripts刀片指令仍然是必需的,但它会自动正确地从/public/vendor/livewire/livewire.js

于 2021-04-17T00:27:48.917 回答
0

对于遇到同样错误但以上没有任何帮助的其他人。

在我的例子中,我有一个 nginx 服务器,它被设置为缓存和传递静态文件,如 .css 和 .js,每当我尝试访问具有 .js 的路由时,nginx 都会尝试查找文件是否存在,如果不存在,提供 404 错误代码并阻止 laravel 做他的事情。

nginx 设置是这样的:

location ~* \.(?:css|js)$ {
10         expires 1M;
11         access_log off;
12         add_header Cache-Control "public";
13     }

我删除了|js.

于 2022-01-27T16:32:30.427 回答
0

打开这个文件confi\livewire.php,然后添加你的公共目录路径,替换这个'asset_url' => null,

'asset_url' => https://www.yourporject.com/public ,

于 2021-08-11T07:37:58.510 回答
-1

在 config/livewire.php 文件中

'asset_url' => url('/'),
于 2021-10-02T23:21:13.087 回答
-1

我也在学习 Laravel Livewire,我也遇到了同样的问题。我的问题通过运行解决了

php artisan vendor:publish --force --tag=livewire:assets

可以参考github上的这个链接:Problem loading Livewire.js

于 2020-10-07T07:45:24.410 回答
-1

我正在将 Xampp 与 PHP8 一起使用。我必须修改config/livewire.php,如下所示:

'asset_url' => config('app.url').'/public',

其中config('app.url')指的是:'url' => env('APP_URL', 'http://localhost'),在我的config/app.php文件中,内部指的是:APP_URL=http://localhost/laravel在我的.env文件中。

于 2021-08-02T19:43:55.910 回答