laravel — показывать имя вместо идентификатора в URL с использованием маршрутизации

#php #laravel #routes

#php #laravel #маршруты

Вопрос:

нужно показать project name вместо id использования маршрута. Я сделал это, но что, если мне тоже понадобится id в контроллере, поскольку я использую его для получения связанных project images и других материалов. как это можно сделать.

вот мой маршрут

 Route::model('project/{name}/{sub}', array('uses' => 'projectController@show'));
  

и вот мой контроллер

 public function show($name)
    {
        $seg = Request::segment(3);

        $pro = Projects::where('pro_title', $name)->first();
        $proImg = ProjectsImages::where('image_id', $id)->get();
        $proPln = ProjectsPlans::where('image_id', $id)->get();
        $services = $pro->pro_serves;
        $service = explode(',', $services);

        switch ($seg) {
            case "project-plans":
                return View::make('projects.projectDetails.verticalPlans', compact('pro', 'proPln'));
                break;
            case "project-images":
                return View::make('projects.projectDetails.projectImages', compact('pro', 'proImg'));
                break;
            case "project-map":
                return View::make('projects.projectDetails.projectPlace', compact('pro'));
                break;
            case "project-features":
                return View::make('projects.projectDetails.projectFeatures', compact('pro', 'service'));
                break;
            default :
                return View::make('projects.projectDetails.aboutProject', compact('pro'));
                break;
        }
    }
  

теперь, как вы можете видеть, я успешно получил маршрут, названный project_title, но мне id тоже нужно получить другие вещи

кто-нибудь может мне помочь, как мне это сделать.

Комментарии:

1. Вы не можете получить идентификатор с помощью $pro->id ?

2. все это было моей ошибкой в route том, что я использовал model вместо get решаемого и теперь работает нормально

Ответ №1:

вы можете получить идентификатор в контроллере

вы получаете все данные проектов, используя

 $pro = Projects::where('pro_title', $name)->first();
  

затем вы передаете этот полученный идентификатор следующим образом

  $proImg = ProjectsImages::where('image_id',  $pro->id)->get();
        $proPln = ProjectsPlans::where('image_id', $pro->id)->get();
  

Комментарии:

1. спасибо, но теперь, когда я пытаюсь посетить изображения проекта, маршрут будет примерно таким, как http://localhost/elarabiaLaravel/project/proName/project-map я понимаю Symfony Component HttpKernel Exception NotFoundHttpException

2. @YousefAltaf.попробуйте напечатать каждый шаг. проверьте, есть ли какие-либо данные в базе данных

3. я route использую /{sub} в качестве третьего pram, который будет содержать project-images, plans, etc. , и я переключаюсь между ними с помощью $seg = Request::segment(3); what should I print извините, не понял вас?

4. выводите один за другим, как $ seg , $ pro etc.so вы можете узнать, что происходит не так

5. распечатано $pro , $proImg получена информация о проекте, распечатаны изображения проекта, я думаю, что это что-то должно быть сделано в маршруте, он самостоятельно проверяет эту полную информацию об ошибке $others = $this->checkForAlternateVerbs($request); if (count($others) > 0) { return $this->getOtherMethodsRoute($request, $others); } throw new NotFoundHttpException;