【问题标题】:How to use custom classes via "use" in Laravel's 5 blade templates?如何使用自定义类在 Laravel 5 刀片模板中“使用”?
【发布时间】:2016-11-29 10:00:00
【问题描述】:

我有一个基于 Windows 和 Linux 的服务器的网络服务器。当我在 Windows 上启动 Laravel 5 项目时,一切正常,但我在使用 Linux(ubuntu)服务器时遇到了问题,在我的主机上也遇到了同样的问题。当我尝试加载索引页面时,我收到如下错误:

找不到类“App\Helpers\Substr”

发生这种情况是因为我在刀片模板中使用了自定义帮助程序,并且一直通过“使用”运算符加载它,如下所示:

<?php

use App\Helpers\Substr;
use App\Helpers\LoaderBtn;

?>

@extends('zaks.public')

@section('content')

@include('zaks.search')

那么,当项目完成后,在这种情况下,什么可能是一个好的解决方案?

【问题讨论】:

  • 谢谢! View composer 看起来很适合这个项目,但无论如何我都无法理解为什么在 Windows 中一切正常。是区分大小写的问题吗?为什么?

标签: php linux apache laravel


【解决方案1】:

首先,确保你的类是通过 Composer 自动加载的。

然后,您可以将命名空间类添加到 config/app.php 中的 'aliases' 数组中,如下所示:

'aliases' => array(
   // other aliases...
   'App_Helper_Substr' => 'App\Helpers\Substr',
);

然后以常规方式在您的视图中使用它:

App_Helper_Substr->something...
App_Helper_Substr::something();

你可以随意命名你的别名。

【讨论】:

  • 我正在尝试这样做,但看起来它对我不起作用。也许这个解决方案只适用于每个自定义类的服务提供商,如 Intervention\Image\ImageServiceProvider::class 和 'Image' => Intervention\Image\Facades\Image::class,
  • 工作就像一个魅力。
【解决方案2】:

我猜问题是您的 Windows 机器上的文件系统不区分大小写。因此,当您尝试加载像App\Helpers\Substr 这样的类时,实际上您的意思是App\Helpers\SubStr,或者文件路径在大小写(PSR-4)时与类名不完全对应,您的类仍然会加载在 Windows 上。

然而,Linux 不那么宽容,并且有一个区分大小写的文件系统(至少我的开发版 Ubuntu 是这样,但我猜它是 Linux 的默认设置)。

因此,您应该做些什么来解决此问题,即追踪您的“案例拼写错误”并进行修复。

为了防止这些问题,并在您犯错后立即发现它们,我强烈建议仅在区分大小写的文件系统上进行开发。我知道你可以在 mac 上创建一个区分大小写的分区,所以我猜想 Windows 可能会出现类似的情况。或者,您可以在开发时在像 homestead 这样的 Linux VM 中工作。我非常喜欢让您的开发环境尽可能接近生产环境。

【讨论】:

    猜你喜欢
    • 2016-12-18
    • 2021-07-11
    • 1970-01-01
    • 2015-10-13
    • 2017-10-08
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多