JonYork
JonYork

Reputation: 1243

laravel route findOrFail() problems

new with Laravel and I am trying to add a findOrFail on this specific route and it's giving me a hard time. What am I missing?

Route::get('/listing/{type}/{owner}/{id}/{address}', 'Properties\DisplayController@show');

Whats not working

Route::get('/listing/{type}/{owner}/{id}/{address}', function ($id) {
    return Properties\DisplayController@show::findOrFail($id);
});

Error I am getting

Parse error: syntax error, unexpected '@', expecting ';'

controller/function I'm calling

 public function show($type, $own, $id, $address = null)
    {
        $page                = (object) $this->template;
        $page->breadcrumbs[] = array('url' => 'javascript://', 'text' => 'Property Search', 'attribute' => array('data-component' => 'back'));

        // Now lets query our server
        $client   = new GuzzleHttp\Client(['verify' => false ]);
        $response = $client->get( env('LISTINGS_SERVER', 'https://listings.homicity.com') . '/property/' . $id);

        $page->content = Property::parseResult($response->getBody());

        $page->title = strtoupper(trim($page->content->address));

        $page->breadcrumbs[] = array('text' => $page->title);

        $formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
        $currency = 'CAD';
        $raw = $formatter->parseCurrency($page->content->price, $currency );

        $page->content->mortgage = Mortgage::stage(
            false,
            $raw
        );

        return view('property.display', compact('page'));
    }

Thanks for the help!

Upvotes: 1

Views: 1173

Answers (2)

JonYork
JonYork

Reputation: 1243

Since the model is on another server that we connect to using GuzzleHTTP, I could not put findOfFail() on the model.

Here is the edit to the controller. Added in the ['http_errors' => false] which prevents guzzle from returning http errors, and then a if statement using getStatusCode() to find if it was a error 500 or not.

public function show($type, $own, $id, $address = null)
    {
        $page                = (object) $this->template;
        $page->breadcrumbs[] = array('url' => 'javascript://', 'text' => 'Property Search', 'attribute' => array('data-component' => 'back'));

        // Now lets query our server
        $client   = new GuzzleHttp\Client(['verify' => false ]);
        $response = $client->get( env('LISTINGS_SERVER', 'https://listings.homicity.com') . '/property/' . $id, ['http_errors' => false]);

        if ($response->getStatusCode() == "500") {
            abort(404);
        }
        else {
            $page->content = Property::parseResult($response->getBody());

            $page->title = strtoupper(trim($page->content->address));

            $page->breadcrumbs[] = array('text' => $page->title);

            $formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
            $currency = 'CAD';
            $raw = $formatter->parseCurrency($page->content->price, $currency );

            $page->content->mortgage = Mortgage::stage(
                false,
                $raw
            );

            return view('property.display', compact('page'));
        }
    }

Upvotes: 0

Sergio Rodrigues
Sergio Rodrigues

Reputation: 974

To return directly on route:

Route::get('/listing/{type}/{owner}/{id}/{address}', function ($id) {
    return App\YourModel::findOrFail($id);
});

https://laravel.com/docs/5.3/eloquent#retrieving-single-models

Upvotes: 1

Related Questions