web-dev-qa-db-ja.com

Laravel 5.5パラメーター付きのブレードビューからコントローラー関数を呼び出す

製品のスライダーがあり、各製品の最低価格を見つけようとしています。

だから、まず、コントローラーから関数を正常に呼び出して、製品のidを渡し、それを印刷しようとしています。

blade.php

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

ルート

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

コントローラー

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

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

そして、エラーが発生します

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

useがここで機能しない理由は何ですか?

メソッド内でuseキーワードを使用することはできません

このように完全なクラスパスを書くことができます

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

@ALiは明らかに正しいので、彼の答えを受け入れることをお勧めします。

ただし、この正確な目的のために作成されたサービスインジェクションディレクティブもあり、使用するのが少しすっきりしています。

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

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

ドキュメント: https://laravel.com/docs/5.5/blade#service-injection

12
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

さらに簡単になります。次のように直接呼び出すことができます。

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

ビューからコントローラー関数を呼び出す簡単な概念は次のとおりです。 href = "Your URL"が表示されたボタンがあります

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

次に、web.phpでルートを定義します。

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

各コントローラーの機能は次のようになります。

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

これがお役に立てば幸いです。

0
Murad