J'ai dupliqué une application laravel de travail et l'ai renommée pour l'utiliser pour une autre application. J'ai supprimé le dossier du fournisseur et relancer les commandes suivantes:
composer self-update
composer-update
npm install
bower install
J'ai configuré mes itinéraires et tout correctement, mais maintenant, lorsque j'essaie d'exécuter mon application dans mon navigateur, les erreurs suivantes sont générées:
InvalidArgumentException dans Compiler.php, ligne 36: Indiquez un chemin de cache valide.
ErrorException dans Filesystem.php, ligne 111: content_put_contents (F:\www\example\app\storage\framework/sessions/edf262ee7a2084a923bb967b967f54cb19f6b37d): échec de l'ouverture du flux: aucun fichier ou répertoire de ce type
Je n'ai jamais eu ce problème auparavant, je ne sais pas ce qui le cause ni comment y remédier, j'ai consulté Google en ligne pour trouver une solution, mais je n'en ai trouvé aucun.
Donc, apparemment, lorsque je dupliquais mon projet, le dossier d'infrastructure à l'intérieur de mon dossier de stockage n'était pas copié dans le nouveau répertoire, ce qui était à l'origine de mon erreur.
Essayez ce qui suit:
créer ces dossiers sous storage/framework:
sessions
views
cache
Maintenant ça devrait marcher
Essaye ça:
php artisan cache:clear
php artisan config:clear
php artisan view:clear
Vous pouvez éditer votre readme.md avec les instructions pour installer votre application laravel dans un autre environnement comme celui-ci:
## Create folders
```
#!terminal
cp .env.example .env && mkdir bootstrap/cache storage storage/framework && cd storage/framework && mkdir sessions views cache
```
## Folder permissions
```
#!terminal
Sudo chown :www-data app storage bootstrap -R
Sudo chmod 775 app storage bootstrap -R
```
## Install dependencies
```
#!terminal
composer install
```
La cause de cette erreur peut être recherchée à partir de Illuminate\View\Compilers\Compiler.php
public function __construct(Filesystem $files, $cachePath)
{
if (! $cachePath) {
throw new InvalidArgumentException('Please provide a valid cache path.');
}
$this->files = $files;
$this->cachePath = $cachePath;
}
Le constructeur est appelé par BladeCompiler dans Illuminate\View\ViewServiceProvider
/**
* Register the Blade engine implementation.
*
* @param \Illuminate\View\Engines\EngineResolver $resolver
* @return void
*/
public function registerBladeEngine($resolver)
{
// The Compiler engine requires an instance of the CompilerInterface, which in
// this case will be the Blade compiler, so we'll first create the compiler
// instance to pass into the engine so it can compile the views properly.
$this->app->singleton('blade.compiler', function () {
return new BladeCompiler(
$this->app['files'], $this->app['config']['view.compiled']
);
});
$resolver->register('blade', function () {
return new CompilerEngine($this->app['blade.compiler']);
});
}
Donc, remontant plus loin, le code suivant:
$this->app['config']['view.compiled']
est généralement situé dans votre /config/view.php, si vous utilisez la structure standard laravel.
<?php
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
resource_path('views'),
],
/*
|--------------------------------------------------------------------------
| Compiled View Path
|--------------------------------------------------------------------------
|
| This option determines where all the compiled Blade templates will be
| stored for your application. Typically, this is within the storage
| directory. However, as usual, you are free to change this value.
|
*/
'compiled' => realpath(storage_path('framework/views')),
];
realpath (...) renvoie false si le chemin n'existe pas. Ainsi, en invoquant
'Please provide a valid cache path.' error.
Par conséquent, pour vous débarrasser de cette erreur, vous pouvez vous assurer que
storage_path('framework/views')
ou
/storage/framework/views
existe :)
Problème de mon côté (lors du déploiement sur localhost): il y avait un dossier de vues manquant .. donc si vous n'avez pas le dossier framework, vous devrez ajouter des dossiers. mais si le dossier de structure existe déjà, assurez-vous que tous les dossiers ci-dessus sont: 1. cache 2. session 3. vues
existe dans votre répertoire framework.
J'ai résolu ce problème en ajoutant cette ligne dans mon index.php
:
$app['config']['view.compiled'] = "storage/framework/cache";