5
<?php
namespace Laravel\Horizon\Http\Controllers;

class HomeController extends Controller
{
      /**
      * Single page application catch-all route.
      * @return \Illuminate\Http\Response
      */
      public function index()
      {
         return view('horizon::app'); // what's the meaning of this 'horizon::app'
      }
}

我在 Laravel-Horizo​​n 控制器中找到了这种语法,任何人都可以解释一下:

view('horizo​​n::app');

是什么意思'horizon::app'

4

3 回答 3

4

就像其他人的回答一样,这被称为view namespaces. 它不仅限于包的视图,您也可以在项目中使用它。

例如,您可能有 admin 和 customer 模块,并希望通过他们自己的文件夹名称来区分他们的视图,此时您可以使用命名空间声明。例如,您可能有以下文件夹结构:

|- resources
   |- views
      |- admin
         |- index.blade.php 
      |- customer
         |- index.blade.php  

然后,您可以在以下位置注册指向该特定文件夹路径的自己的命名空间AppServiceProvider.php

app('view')->addNamespace('admin', base_path() . '/resources/views/admin');

// or

app('view')->addNamespace('customer', base_path() . '/resources/views/customer');

稍后,在控制器的方法中,您可以使用以下方法引用它:

return view("admin::index"); 

// or

return view("customer::index");
于 2018-05-03T04:02:57.813 回答
2

:: is the scope (namespace) operator. Meaning app is declared within horizon.

Example (from php.net):

<?php
class MyClass {
    const CONST_VALUE = 'Un valor constante';
}

$classname = 'MyClass';
echo $classname::CONST_VALUE; // A partir de PHP 5.3.0

echo MyClass::CONST_VALUE;
?>
于 2018-05-03T03:30:21.567 回答
2

此语法指示命名的视图app属于horizon包。将其视为package::view.path.

Laravel 的包开发文档中的更多信息。

要将包的视图注册到 Laravel,你需要告诉 Laravel 视图的位置。

使用 package::view 语法约定来引用包视图。因此,一旦您的视图路径在服务提供商中注册,您就可以从 courier 包中加载管理视图,如下所示:

Route::get('admin', function () {
    return view('courier::admin');
});

如果您已经看到该术语或想要搜索其他内容,则此功能曾经被称为视图命名空间。:)

于 2018-05-03T03:43:33.383 回答