web-dev-qa-db-fra.com

Laravel 5.5 fonction de contrôleur d'appel de la vue de lame avec le paramètre

J'ai un slider de produits et j'essaie de trouver le prix le plus bas de chaque produit.

J'essaie donc tout d'abord d'appeler avec succès une fonction à partir d'un contrôleur et de transmettre la id du produit, ainsi que de l'imprimer.

blade.php

 <span class="text-bold">
   @php
    use App\Http\Controllers\ServiceProvider;
    echo ServiceProvider::getLowestPrice($product_cat->id);
   @endphp
 </span>

Itinéraire

Route::post('/getLowestPrice/{id}', 'ServiceProvider@getLowestPrice');

Manette

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ServiceProvider extends Controller
{
    public static function getLowestPrice($id) {
        return $id;
    }
}

Et je reçois une erreur

Parse error: syntax error, unexpected 'use' (T_USE) 

Avez-vous une idée de la raison pour laquelle use ne fonctionne pas ici?

4

vous ne pouvez pas utiliser le mot clé use dans la méthode

vous pouvez écrire le chemin complet de la classe, comme ceci 

 <span class="text-bold">
   @php
    echo App\Http\Controllers\ServiceProvider::getLowestPrice($product_cat->id);
   @endphp
 </span>
4
Ali

@ALi est évidemment correct et je vous suggère d'accepter sa réponse.

J'aimerais toutefois ajouter qu'il existe également une directive sur l'injection de service, conçue spécifiquement à cet effet et qui est un peu plus propre à utiliser.

@inject('provider', 'App\Http\Controllers\ServiceProvider')

<span class="text-bold">
    {{ $provider::getLowestPrice($product_cat->id) }}
</span>

Docs: https://laravel.com/docs/5.5/blade#service-injection

5
Joel Hinz
//Create a static type function in your controller.The function must be a static type function.

    <?php
    namespace App\Http\Controllers;
    use Illuminate\Http\Request;

    class ServiceProvider extends Controller
    { 
        public static function getLowestPrice($val){
            // do your stuff or return something.
        }
    }

    //Then Call the ServiceProvider Controller function from view


    //include the controller class.
    <?php use App\Http\Controllers\ServiceProvider;?>
    //call the controller function in php way with passing args.
    <?php echo ServiceProvider::getLowestPrice($product_cat->id); ?>
    // Or call the controller function in blade way.
    {{ServiceProvider::getLowestPrice($product_cat->id)}}
1
TheLastCodeBender

Un concept simple, permettant d’appeler la fonction de contrôleur depuis l’affichage est: Vous avez un bouton en vue avec href = "Votre URL"

 <a href="/user/projects/{id}" class="btn btn-primary">Button</a>

Définissez maintenant un itinéraire dans web.php:

Route::get('/user/projects/{id}', 'user_controller@showProject');

Une fonction dans le contrôleur respectif ressemblera à ceci:

 public function showProject($id){
 $post =posts::find($id);
 return view('user.show_projects')->with('post', $post);;
    }

J'espère que cela t'aidera.

0
Murad

Cela peut être encore plus facile, vous pouvez l'appeler directement comme ceci:

<span class="text-bold">
    {{App\ServiceProvider::getLowestPrice($product_cat->id)}}
</span>
0
Davide Casiraghi