如何在Laravel的5个刀片模板中通过“use”使用自定义类?

时间:2016-07-25 22:17:13

标签: php linux apache laravel

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

  

未找到类'App \ Helpers \ Substr'

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

<?php

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

?>

@extends('zaks.public')

@section('content')

@include('zaks.search')

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

2 个答案:

答案 0 :(得分:8)

首先,确保您的类通过Composer左右自动加载。

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

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

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

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

您可以随意命名别名。

答案 1 :(得分:0)

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

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

那么你应该做些什么来解决这个问题就是追查你的“案例拼写错误”并修复它。

为了防止出现这些问题,并在出错时立即捕获它们,我强烈建议您仅在区分大小写的文件系统上进行开发。我知道你可以在mac上创建一个区分大小写的分区,所以我猜想类似的东西可能会以某种方式用于Windows。或者你可以在开发时使用像homestead这样的Linux VM。我非常喜欢让您的开发环境尽可能贴近生产环境。