我将Laravel 5项目部署到共享主机帐户,将应用程序文件放在www文件夹之外,只将公共文件夹放在www文件夹中。所有这些都在这里解释,最好的答案是:Laravel 4 and the way to deploy app using FTP ...没有3.因为这个文件在Laravel 5中不存在。
现在当我在控制器内部调用public_path()时,我会得到类似 my-appfiles-outside-of www / public 而不是 www /公共即可。有谁知道为什么我没有在这里找到正确的道路?我可以在某处更改吗? 谢谢!
答案 0 :(得分:5)
您可以使用容器覆盖public_path。 例如:
mysql> select e.id,
e.name,
s.skillset from employee e
join employee_skills es on es.idemployee = e.id
join skillset s on s.id = es.idskills where s.id = 1 ;
+------+------+----------+
| id | name | skillset |
+------+------+----------+
| 1 | xyz | Python |
| 2 | abc | Python |
| 3 | lmn | Python |
+------+------+----------+
答案 1 :(得分:2)
有许多解决方案,例如对index.php的更改或使用ioc容器的已接受的解决方案。
在我看来,最有效的解决方案在此SO问题中有所描述: Laravel 5 change public_path()
为什么它比其他解决方案更好?因为它适用于常规的http请求,使用工匠和使用phpunit进行测试!例如。对index.php的更改仅适用于http请求,但在使用PHPunit时会导致失败(在我的情况下:文件(...)未在资产清单中定义)。
该解决方案的简短回顾: 第1步:在文件中:bootstrap / app.php更改$ app变量的第一个声明:
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
为:
$app = new App\Application(
realpath(__DIR__.'/../')
);
这指向您自己的自定义Application类,我们将在步骤2中创建它。
步骤2:在app文件夹中创建文件Application.php:
<?php namespace App;
class Application extends \Illuminate\Foundation\Application
{
public function publicPath()
{
return $this->basePath . '/../public_html';
}
}
请务必根据需要更改路径。该示例假设目录结构如下:
°°laravel_app
°°°°应用
··引导
°°°°配置
°°°°...
°°的public_html
如果是OP,路径应该是
return $this->basePath . '/../www/public';
(从laravel_app开始,然后进入www / public)
答案 2 :(得分:1)
$app->bind('path.public', function() {
return __DIR__;
});
在此代码上方的public_html \ index.php中编写以上代码
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);